Mozilla diabolical clamp case added to gm/gradients.cpp





Added diabolical clamp case.

BUG=
R=reed@google.com

Author: dierk@google.com

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

git-svn-id: http://skia.googlecode.com/svn/trunk@10604 2bbb7eff-a529-9590-31e7-b0007b416f81
diff --git a/gm/gradients.cpp b/gm/gradients.cpp
index 97f8fda..604d1c3 100644
--- a/gm/gradients.cpp
+++ b/gm/gradients.cpp
@@ -25,12 +25,18 @@
     0, SK_Scalar1/8, SK_Scalar1/2, SK_Scalar1*7/8, SK_Scalar1
 };
 
+static const SkScalar gPosClamp[]   = {0.0f, 0.0f, 1.0f, 1.0f};
+static const SkColor  gColorClamp[] = {
+    SK_ColorRED, SK_ColorGREEN, SK_ColorGREEN, SK_ColorBLUE
+};
+
 static const GradData gGradData[] = {
     { 2, gColors, NULL },
     { 2, gColors, gPos0 },
     { 2, gColors, gPos1 },
     { 5, gColors, NULL },
-    { 5, gColors, gPos2 }
+    { 5, gColors, gPos2 },
+    { 4, gColorClamp, gPosClamp }
 };
 
 static SkShader* MakeLinear(const SkPoint pts[2], const GradData& data,
@@ -120,6 +126,14 @@
             canvas->save();
             for (size_t j = 0; j < SK_ARRAY_COUNT(gGradMakers); j++) {
                 SkShader* shader = gGradMakers[j](pts, gGradData[i], tm, NULL);
+
+                if (i == 5) { // if the clamp case
+                    SkMatrix scale;
+                    scale.setScale(0.5f, 0.5f);
+                    scale.postTranslate(25.f, 25.f);
+                    shader->setLocalMatrix(scale);
+                }
+                    
                 paint.setShader(shader);
                 canvas->drawRect(r, paint);
                 shader->unref();
@@ -173,6 +187,7 @@
                                       SkIntToScalar(500)));
                 perspective.setSkewX(SkScalarDiv(SkIntToScalar((unsigned) i+1),
                                      SkIntToScalar(10)));
+
                 shader->setLocalMatrix(perspective);
 
                 paint.setShader(shader);