Make GrPaint have a variable sized array of color and coverage stages rather than a fixed size.

R=robertphillips@google.com, jvanverth@google.com

Author: bsalomon@google.com

Review URL: https://chromiumcodereview.appspot.com/18686007

git-svn-id: http://skia.googlecode.com/svn/trunk@10062 2bbb7eff-a529-9590-31e7-b0007b416f81
diff --git a/src/effects/SkBicubicImageFilter.cpp b/src/effects/SkBicubicImageFilter.cpp
index a97a768..5161f6d 100644
--- a/src/effects/SkBicubicImageFilter.cpp
+++ b/src/effects/SkBicubicImageFilter.cpp
@@ -365,7 +365,7 @@
     }
     GrContext::AutoRenderTarget art(context, dst->asRenderTarget());
     GrPaint paint;
-    paint.colorStage(0)->setEffect(GrBicubicEffect::Create(srcTexture, fCoefficients))->unref();
+    paint.addColorEffect(GrBicubicEffect::Create(srcTexture, fCoefficients))->unref();
     SkRect srcRect;
     srcBM.getBounds(&srcRect);
     context->drawRectToRect(paint, dstRect, srcRect);
diff --git a/src/effects/SkBlendImageFilter.cpp b/src/effects/SkBlendImageFilter.cpp
index 1c40ca8..9aae35a 100644
--- a/src/effects/SkBlendImageFilter.cpp
+++ b/src/effects/SkBlendImageFilter.cpp
@@ -194,8 +194,9 @@
     GrContext::AutoRenderTarget art(context, dst->asRenderTarget());
 
     GrPaint paint;
-    paint.colorStage(0)->setEffect(
-        GrBlendEffect::Create(fMode, foreground, foregroundOffset, background, backgroundOffset))->unref();
+    paint.addColorEffect(GrBlendEffect::Create(fMode,
+                                               foreground, foregroundOffset,
+                                               background, backgroundOffset))->unref();
     SkRect srcRect;
     src.getBounds(&srcRect);
     context->drawRect(paint, srcRect);
diff --git a/src/effects/SkBlurMaskFilter.cpp b/src/effects/SkBlurMaskFilter.cpp
index 85176d6..66a07c4 100644
--- a/src/effects/SkBlurMaskFilter.cpp
+++ b/src/effects/SkBlurMaskFilter.cpp
@@ -423,8 +423,7 @@
         matrix.setIDiv(src->width(), src->height());
         // Blend pathTexture over blurTexture.
         GrContext::AutoRenderTarget art(context, (*result)->asRenderTarget());
-        paint.colorStage(0)->setEffect(
-            GrSimpleTextureEffect::Create(src, matrix))->unref();
+        paint.addColorEffect(GrSimpleTextureEffect::Create(src, matrix))->unref();
         if (SkBlurMaskFilter::kInner_BlurStyle == fBlurStyle) {
             // inner:  dst = dst * src
             paint.setBlendFunc(kDC_GrBlendCoeff, kZero_GrBlendCoeff);
diff --git a/src/effects/SkDisplacementMapEffect.cpp b/src/effects/SkDisplacementMapEffect.cpp
index 8d287b2..7b64d1d 100644
--- a/src/effects/SkDisplacementMapEffect.cpp
+++ b/src/effects/SkDisplacementMapEffect.cpp
@@ -305,7 +305,7 @@
     GrContext::AutoRenderTarget art(context, dst->asRenderTarget());
 
     GrPaint paint;
-    paint.colorStage(0)->setEffect(
+    paint.addColorEffect(
         GrDisplacementMapEffect::Create(fXChannelSelector,
                                         fYChannelSelector,
                                         fScale,
diff --git a/src/effects/SkMorphologyImageFilter.cpp b/src/effects/SkMorphologyImageFilter.cpp
index cb17c90..4783abd 100644
--- a/src/effects/SkMorphologyImageFilter.cpp
+++ b/src/effects/SkMorphologyImageFilter.cpp
@@ -452,10 +452,10 @@
                            GrMorphologyEffect::MorphologyType morphType,
                            Gr1DKernelEffect::Direction direction) {
     GrPaint paint;
-    paint.colorStage(0)->setEffect(GrMorphologyEffect::Create(texture,
-                                                              direction,
-                                                              radius,
-                                                              morphType))->unref();
+    paint.addColorEffect(GrMorphologyEffect::Create(texture,
+                                                    direction,
+                                                    radius,
+                                                    morphType))->unref();
     context->drawRect(paint, SkRect::MakeFromIRect(rect));
 }
 
diff --git a/src/effects/SkXfermodeImageFilter.cpp b/src/effects/SkXfermodeImageFilter.cpp
index a318ceb..3df59a8 100644
--- a/src/effects/SkXfermodeImageFilter.cpp
+++ b/src/effects/SkXfermodeImageFilter.cpp
@@ -119,23 +119,23 @@
                                   SkIntToScalar(backgroundOffset.fY-foregroundOffset.fY));
 
 
-    GrPaint paint;
     SkRect srcRect;
     src.getBounds(&srcRect);
     if (NULL != xferEffect) {
-        paint.colorStage(0)->setEffect(
-            GrSimpleTextureEffect::Create(foregroundTex, foregroundMatrix))->unref();
-        paint.colorStage(1)->setEffect(xferEffect)->unref();
+        GrPaint paint;
+        paint.addColorTextureEffect(foregroundTex, foregroundMatrix);
+        paint.addColorEffect(xferEffect)->unref();
         context->drawRect(paint, srcRect);
     } else {
+        GrPaint backgroundPaint;
         SkMatrix backgroundMatrix = GrEffect::MakeDivByTextureWHMatrix(backgroundTex);
-        paint.colorStage(0)->setEffect(
-            GrSimpleTextureEffect::Create(backgroundTex, backgroundMatrix))->unref();
-        context->drawRect(paint, srcRect);
-        paint.setBlendFunc(sk_blend_to_grblend(sm), sk_blend_to_grblend(dm));
-        paint.colorStage(0)->setEffect(
-            GrSimpleTextureEffect::Create(foregroundTex, foregroundMatrix))->unref();
-        context->drawRect(paint, srcRect);
+        backgroundPaint.addColorTextureEffect(backgroundTex, backgroundMatrix);
+        context->drawRect(backgroundPaint, srcRect);
+
+        GrPaint foregroundPaint;
+        foregroundPaint.setBlendFunc(sk_blend_to_grblend(sm), sk_blend_to_grblend(dm));
+        foregroundPaint.addColorTextureEffect(foregroundTex, foregroundMatrix);
+        context->drawRect(foregroundPaint, srcRect);
     }
     offset->fX += backgroundOffset.fX;
     offset->fY += backgroundOffset.fY;