ColorShaders report no bitmaps, but only a color_gradient, which we now detect
on the gpu side.



git-svn-id: http://skia.googlecode.com/svn/trunk@1810 2bbb7eff-a529-9590-31e7-b0007b416f81
diff --git a/src/core/SkShader.cpp b/src/core/SkShader.cpp
index 48c9966..6865fb7 100644
--- a/src/core/SkShader.cpp
+++ b/src/core/SkShader.cpp
@@ -219,23 +219,18 @@
 SkColorShader::SkColorShader() {
     fFlags = 0;
     fInheritColor = true;
-    fAsABitmapPixelRef = NULL;
 }
 
 SkColorShader::SkColorShader(SkColor c) {
     fFlags = 0;
     fColor = c;
     fInheritColor = false;
-    fAsABitmapPixelRef = NULL;
 }
 
-SkColorShader::~SkColorShader() {
-    SkSafeUnref(fAsABitmapPixelRef);
-}
+SkColorShader::~SkColorShader() {}
 
 SkColorShader::SkColorShader(SkFlattenableReadBuffer& b) : INHERITED(b) {
     fFlags = 0; // computed in setContext
-    fAsABitmapPixelRef = NULL;
 
     fInheritColor = b.readU8();
     if (fInheritColor) {
@@ -313,25 +308,7 @@
 SkShader::BitmapType SkColorShader::asABitmap(SkBitmap* bitmap, SkMatrix* matrix,
                                               TileMode modes[],
                                       SkScalar* twoPointRadialParams) const {
-    // we cache the pixelref, since its generateID is used in the texture cache
-    if (NULL == fAsABitmapPixelRef) {
-        SkPMColor* storage = (SkPMColor*)sk_malloc_throw(sizeof(SkPMColor));
-        *storage = fPMColor;
-        fAsABitmapPixelRef = new SkMallocPixelRef(storage, sizeof(SkPMColor),
-                                                  NULL);
-    }
-
-    if (bitmap) {
-        bitmap->setConfig(SkBitmap::kARGB_8888_Config, 1, 1);
-        bitmap->setPixelRef(fAsABitmapPixelRef);
-    }
-    if (matrix) {
-        matrix->reset();
-    }
-    if (modes) {
-        modes[0] = modes[1] = SkShader::kRepeat_TileMode;
-    }
-    return kDefault_BitmapType;
+    return kNone_BitmapType;
 }
 
 SkShader::GradientType SkColorShader::asAGradient(GradientInfo* info) const {
diff --git a/src/gpu/SkGpuDevice.cpp b/src/gpu/SkGpuDevice.cpp
index 0f18726..b8cc2bb 100644
--- a/src/gpu/SkGpuDevice.cpp
+++ b/src/gpu/SkGpuDevice.cpp
@@ -481,6 +481,21 @@
 
     GrSamplerState::SampleMode sampleMode = sk_bmp_type_to_sample_mode[bmptype];
     if (-1 == sampleMode) {
+        SkShader::GradientInfo info;
+        SkColor                color;
+
+        info.fColors = &color;
+        info.fColorOffsets = NULL;
+        info.fColorCount = 1;
+        if (SkShader::kColor_GradientType == shader->asAGradient(&info)) {
+            SkPaint copy(skPaint);
+            copy.setShader(NULL);
+            copy.setColor(SkColorSetA(color, copy.getAlpha()));
+            return this->skPaint2GrPaintNoShader(copy,
+                                                 false,
+                                                 grPaint,
+                                                 constantColor);
+        }
         return false;
     }
     GrSamplerState* sampler = grPaint->getTextureSampler(kShaderTextureIdx);