Chromium Code Reviews| 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); |