Index: gm/gradient_matrix.cpp |
diff --git a/gm/gradient_matrix.cpp b/gm/gradient_matrix.cpp |
index 8915b1699c709c2cc2afe36897c47801ba77eddf..21530b5668e5fe84359e3e3e50422a3d9a1c3bef 100644 |
--- a/gm/gradient_matrix.cpp |
+++ b/gm/gradient_matrix.cpp |
@@ -14,11 +14,21 @@ static const SkScalar gPosAll[] = { |
0, SK_Scalar1 |
}; |
-static SkShader* SimpleGradient(const SkPoint pts[2]) { |
+static SkShader* SimpleLinearGradient(const SkPoint pts[2]) { |
vandebo (ex-Chrome)
2013/06/11 05:15:25
MakeLinearGradient
ducky
2013/06/11 19:51:01
Done.
|
return SkGradientShader::CreateLinear(pts, gColors, gPosAll, |
2, SkShader::kClamp_TileMode, NULL); |
} |
+static SkShader* SimpleRadialGradient(const SkPoint pts[2], const GradData& data, |
vandebo (ex-Chrome)
2013/06/11 05:15:25
MakeRadialGRadient
ducky
2013/06/11 19:51:01
Done.
|
+ SkShader::TileMode tm, SkUnitMapper* mapper) { |
vandebo (ex-Chrome)
2013/06/11 05:15:25
line up previous line (first const).
ducky
2013/06/11 19:51:01
Done.
|
+ 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, |
reed1
2013/06/11 13:54:16
Another common way to pass these...
..., gColors,
ducky
2013/06/11 19:51:01
Done.
|
+ gPosAll, 2, SkShader::kClamp_TileMode, NULL); |
vandebo (ex-Chrome)
2013/06/11 05:15:25
nit: gPosAll, 2, on previous line.
ducky
2013/06/11 19:51:01
Done.
|
+} |
+ |
namespace skiagm { |
class GradientMatrixGM : public GM { |
@@ -32,7 +42,7 @@ protected: |
return SkString("gradient_matrix"); |
} |
- virtual SkISize onISize() { return make_isize(800, 400); } |
+ virtual SkISize onISize() { return make_isize(800, 800); } |
reed1
2013/06/11 13:54:16
make_isize() is a hold-over from before we had goo
ducky
2013/06/11 19:51:01
Done.
|
virtual void onDraw(SkCanvas* canvas) { |
vandebo (ex-Chrome)
2013/06/11 05:15:25
This method is rather repetitive. Can you pack th
ducky
2013/06/11 19:51:01
Done.
|
const int TESTGRID_X = 200; |
@@ -40,28 +50,52 @@ protected: |
canvas->save(); |
- testGrad(canvas, 0, 0, 1, 0); |
+ drawLinearGradient(canvas, 0, 0, 1, 0); |
+ canvas->translate(TESTGRID_X, 0); |
+ drawLinearGradient(canvas, 0, 0, 0, 1); |
+ canvas->translate(TESTGRID_X, 0); |
+ drawLinearGradient(canvas, 1, 0, 0, 0); |
+ canvas->translate(TESTGRID_X, 0); |
+ drawLinearGradient(canvas, 0, 1, 0, 0); |
+ |
+ canvas->restore(); |
+ canvas->translate(0, TESTGRID_Y); |
+ canvas->save(); |
+ |
+ drawLinearGradient(canvas, 0, 0, 1, 1); |
+ canvas->translate(TESTGRID_X, 0); |
+ drawLinearGradient(canvas, 1, 1, 0, 0); |
+ canvas->translate(TESTGRID_X, 0); |
+ drawLinearGradient(canvas, 1, 0, 0, 1); |
+ canvas->translate(TESTGRID_X, 0); |
+ drawLinearGradient(canvas, 0, 1, 1, 0); |
+ |
+ canvas->restore(); |
+ canvas->translate(0, TESTGRID_Y); |
+ canvas->save(); |
+ |
+ drawRadialGradient(canvas, 0, 0.5, 1, 0.5); |
canvas->translate(TESTGRID_X, 0); |
- testGrad(canvas, 0, 0, 0, 1); |
+ drawRadialGradient(canvas, 0.5, 0, 0.5, 1); |
canvas->translate(TESTGRID_X, 0); |
- testGrad(canvas, 1, 0, 0, 0); |
+ drawRadialGradient(canvas, 1, 0.5, 0, 0.5); |
canvas->translate(TESTGRID_X, 0); |
- testGrad(canvas, 0, 1, 0, 0); |
+ drawRadialGradient(canvas, 0.5, 1, 0.5, 0); |
canvas->restore(); |
canvas->translate(0, TESTGRID_Y); |
canvas->save(); |
- testGrad(canvas, 0, 0, 1, 1); |
+ drawRadialGradient(canvas, 0, 0, 1, 1); |
canvas->translate(TESTGRID_X, 0); |
- testGrad(canvas, 1, 1, 0, 0); |
+ drawRadialGradient(canvas, 1, 1, 0, 0); |
canvas->translate(TESTGRID_X, 0); |
- testGrad(canvas, 1, 0, 0, 1); |
+ drawRadialGradient(canvas, 1, 0, 0, 1); |
canvas->translate(TESTGRID_X, 0); |
- testGrad(canvas, 0, 1, 1, 0); |
+ drawRadialGradient(canvas, 0, 1, 1, 0); |
} |
- virtual void simpleGrad(SkCanvas* canvas) { |
+ virtual void simpleGradient(SkCanvas* canvas) { |
SkPoint pts[2] = { |
{ 100, 0 }, |
{ 0, 0 } |
@@ -72,7 +106,27 @@ protected: |
0, 0, 1); |
SkRect rectGrad = { 0, 0, 100, 100 }; // very simple numbers |
- SkShader* shader = SimpleGradient(pts); |
+ SkShader* shader = SimpleLinearGradient(pts); |
+ shader->setLocalMatrix(shaderMat); |
+ SkPaint paint; |
+ paint.setAntiAlias(true); |
+ paint.setShader(shader); |
+ canvas->drawRect(rectGrad, paint); |
+ shader->unref(); |
+ } |
+ |
+ virtual void drawRadialGradient(SkCanvas* canvas, float x1, float y1, float x2, float y2) { |
vandebo (ex-Chrome)
2013/06/11 05:15:25
This method is basically a duplicate of the next o
ducky
2013/06/11 19:51:01
Done.
|
+ SkPoint pts[2] = { |
+ { x1, y1 }, |
+ { x2, y2 } |
+ }; |
+ SkMatrix shaderMat = SkMatrix(); |
+ shaderMat.setAll(138, 0, 43, |
+ 0, 106, 61, |
+ 0, 0, 1); |
+ SkRect rectGrad = { 43, 61, 181, 167 }; // some nice prime numbers |
+ |
+ SkShader* shader = SimpleRadialGradient(pts); |
shader->setLocalMatrix(shaderMat); |
SkPaint paint; |
paint.setAntiAlias(true); |
@@ -81,7 +135,7 @@ protected: |
shader->unref(); |
} |
- virtual void testGrad(SkCanvas* canvas, int x1, int y1, int x2, int y2) { |
+ virtual void drawLinearGradient(SkCanvas* canvas, float x1, float y1, float x2, float y2) { |
SkPoint pts[2] = { |
{ x1, y1 }, |
{ x2, y2 } |
@@ -92,7 +146,7 @@ protected: |
0, 0, 1); |
SkRect rectGrad = { 43, 61, 181, 167 }; // some nice prime numbers |
- SkShader* shader = SimpleGradient(pts); |
+ SkShader* shader = SimpleLinearGradient(pts); |
shader->setLocalMatrix(shaderMat); |
SkPaint paint; |
paint.setAntiAlias(true); |