Index: gm/gradient_matrix.cpp |
diff --git a/gm/gradient_matrix.cpp b/gm/gradient_matrix.cpp |
index cc1683e08939a197b9c0f246031faba68c8d700d..c1ff65e3d903e5c4e6c1f44ef390c8a3d1fbe6e9 100644 |
--- a/gm/gradient_matrix.cpp |
+++ b/gm/gradient_matrix.cpp |
@@ -37,6 +37,19 @@ static const SkPoint linearPts[][2] = { |
{{0, 1}, {1, 0}} |
}; |
+static const SkPoint radialPts[][2] = { |
+ {{0, 0.5}, {1, 0.5}}, |
+ {{0.5, 0 }, {0.5, 1 }}, |
+ {{1, 0.5}, {0, 0.5}}, |
+ {{0.5, 1 }, {0.5, 0 }}, |
+ |
+ {{0, 0}, {1, 1}}, |
+ {{1, 1}, {0, 0}}, |
+ {{1, 0}, {0, 1}}, |
+ {{0, 1}, {1, 0}} |
+}; |
+ |
+ |
static const SkScalar TESTGRID_X = 200; // pixels allocated to each image in x dimension |
static const SkScalar TESTGRID_Y = 200; // pixels allocated to each image in y dimension |
@@ -47,8 +60,17 @@ static SkShader* make_linear_gradient(const SkPoint pts[2]) { |
SkShader::kClamp_TileMode, NULL); |
} |
+static SkShader* make_radial_gradient(const SkPoint pts[2]) { |
+ SkPoint center; |
+ center.set(SkScalarAve(pts[0].fX, pts[1].fX), |
+ SkScalarAve(pts[0].fY, pts[1].fY)); |
+ float radius = (center - pts[0]).length(); |
+ return SkGradientShader::CreateRadial(center, radius, gColors, NULL, SK_ARRAY_COUNT(gColors), |
+ SkShader::kClamp_TileMode, NULL); |
+} |
+ |
static void draw_gradients(SkCanvas* canvas, SkShader* (*makeShader)(const SkPoint[2]), |
- const SkPoint ptsArray[][2], int numImages) { |
+ const SkPoint ptsArray[][2], int numImages) { |
// Use some nice prime numbers for the rectangle and matrix with |
// different scaling along the x and y axes (which is the bug this |
// test addresses, where incorrect order of operations mixed up the axes) |
@@ -101,6 +123,11 @@ protected: |
virtual void onDraw(SkCanvas* canvas) SK_OVERRIDE { |
draw_gradients(canvas, &make_linear_gradient, |
linearPts, SK_ARRAY_COUNT(linearPts)); |
+ |
+ canvas->translate(0, TESTGRID_Y); |
+ |
+ draw_gradients(canvas, &make_radial_gradient, |
+ radialPts, SK_ARRAY_COUNT(radialPts)); |
} |
private: |