add shader flag kConstInY_Flag
this signals blitters that the shader will return the same results for a given
x value, independent of y. Useful inside blitRect(), where it can cache the
first call to shadeSpan() and reuse it on all subsequent scans. Works with
(non-rotated) linear-gradients, and Nx1 bitmaps.



git-svn-id: http://skia.googlecode.com/svn/trunk@214 2bbb7eff-a529-9590-31e7-b0007b416f81
diff --git a/src/core/SkShader.cpp b/src/core/SkShader.cpp
index dd9c859..5567914 100644
--- a/src/core/SkShader.cpp
+++ b/src/core/SkShader.cpp
@@ -210,6 +210,7 @@
 #include "SkUtils.h"
 
 SkColorShader::SkColorShader(SkFlattenableReadBuffer& b) : INHERITED(b) {
+    fFlags = 0; // computed in setContext
     fInheritColor = b.readU8(); 
     if (fInheritColor) {
         return;
@@ -226,11 +227,6 @@
     buffer.write32(fColor);
 }
 
-uint32_t SkColorShader::getFlags() {
-    return (SkGetPackedA32(fPMColor) == 255 ? kOpaqueAlpha_Flag : 0) |
-            kHasSpan16_Flag;
-}
-
 uint8_t SkColorShader::getSpan16Alpha() const {
     return SkGetPackedA32(fPMColor);
 }
@@ -267,6 +263,11 @@
     }
     fPMColor = SkPackARGB32(a, r, g, b);
 
+    fFlags = kHasSpan16_Flag | kConstInY_Flag;
+    if (SkGetPackedA32(fPMColor) == 255) {
+        fFlags |= kOpaqueAlpha_Flag;
+    }
+
     return true;
 }