Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 /* | 1 /* |
| 2 * Copyright 2013 Google Inc. | 2 * Copyright 2013 Google Inc. |
| 3 * | 3 * |
| 4 * Use of this source code is governed by a BSD-style license that can be | 4 * Use of this source code is governed by a BSD-style license that can be |
| 5 * found in the LICENSE file. | 5 * found in the LICENSE file. |
| 6 */ | 6 */ |
| 7 #include "gm.h" | 7 #include "gm.h" |
| 8 #include "SkGradientShader.h" | 8 #include "SkGradientShader.h" |
| 9 | 9 |
| 10 static const SkColor gColors[] = { | 10 static const SkColor gColors[] = { |
| 11 SK_ColorRED, SK_ColorYELLOW | 11 SK_ColorRED, SK_ColorYELLOW |
| 12 }; | 12 }; |
| 13 static const SkScalar gPosAll[] = { | 13 static const SkScalar gPosAll[] = { |
| 14 0, SK_Scalar1 | 14 0, SK_Scalar1 |
| 15 }; | 15 }; |
| 16 | 16 |
| 17 static SkShader* SimpleGradient(const SkPoint pts[2]) { | 17 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.
| |
| 18 return SkGradientShader::CreateLinear(pts, gColors, gPosAll, | 18 return SkGradientShader::CreateLinear(pts, gColors, gPosAll, |
| 19 2, SkShader::kClamp_TileMode, NULL); | 19 2, SkShader::kClamp_TileMode, NULL); |
| 20 } | 20 } |
| 21 | 21 |
| 22 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.
| |
| 23 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.
| |
| 24 SkPoint center; | |
| 25 center.set(SkScalarAve(pts[0].fX, pts[1].fX), | |
| 26 SkScalarAve(pts[0].fY, pts[1].fY)); | |
| 27 float radius = (center - pts[0]).length(); | |
| 28 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.
| |
| 29 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.
| |
| 30 } | |
| 31 | |
| 22 namespace skiagm { | 32 namespace skiagm { |
| 23 | 33 |
| 24 class GradientMatrixGM : public GM { | 34 class GradientMatrixGM : public GM { |
| 25 public: | 35 public: |
| 26 GradientMatrixGM() { | 36 GradientMatrixGM() { |
| 27 this->setBGColor(0xFFDDDDDD); | 37 this->setBGColor(0xFFDDDDDD); |
| 28 } | 38 } |
| 29 | 39 |
| 30 protected: | 40 protected: |
| 31 SkString onShortName() { | 41 SkString onShortName() { |
| 32 return SkString("gradient_matrix"); | 42 return SkString("gradient_matrix"); |
| 33 } | 43 } |
| 34 | 44 |
| 35 virtual SkISize onISize() { return make_isize(800, 400); } | 45 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.
| |
| 36 | 46 |
| 37 virtual void onDraw(SkCanvas* canvas) { | 47 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.
| |
| 38 const int TESTGRID_X = 200; | 48 const int TESTGRID_X = 200; |
| 39 const int TESTGRID_Y = 200; | 49 const int TESTGRID_Y = 200; |
| 40 | 50 |
| 41 canvas->save(); | 51 canvas->save(); |
| 42 | 52 |
| 43 testGrad(canvas, 0, 0, 1, 0); | 53 drawLinearGradient(canvas, 0, 0, 1, 0); |
| 44 canvas->translate(TESTGRID_X, 0); | 54 canvas->translate(TESTGRID_X, 0); |
| 45 testGrad(canvas, 0, 0, 0, 1); | 55 drawLinearGradient(canvas, 0, 0, 0, 1); |
| 46 canvas->translate(TESTGRID_X, 0); | 56 canvas->translate(TESTGRID_X, 0); |
| 47 testGrad(canvas, 1, 0, 0, 0); | 57 drawLinearGradient(canvas, 1, 0, 0, 0); |
| 48 canvas->translate(TESTGRID_X, 0); | 58 canvas->translate(TESTGRID_X, 0); |
| 49 testGrad(canvas, 0, 1, 0, 0); | 59 drawLinearGradient(canvas, 0, 1, 0, 0); |
| 50 | 60 |
| 51 canvas->restore(); | 61 canvas->restore(); |
| 52 canvas->translate(0, TESTGRID_Y); | 62 canvas->translate(0, TESTGRID_Y); |
| 53 canvas->save(); | 63 canvas->save(); |
| 54 | 64 |
| 55 testGrad(canvas, 0, 0, 1, 1); | 65 drawLinearGradient(canvas, 0, 0, 1, 1); |
| 56 canvas->translate(TESTGRID_X, 0); | 66 canvas->translate(TESTGRID_X, 0); |
| 57 testGrad(canvas, 1, 1, 0, 0); | 67 drawLinearGradient(canvas, 1, 1, 0, 0); |
| 58 canvas->translate(TESTGRID_X, 0); | 68 canvas->translate(TESTGRID_X, 0); |
| 59 testGrad(canvas, 1, 0, 0, 1); | 69 drawLinearGradient(canvas, 1, 0, 0, 1); |
| 60 canvas->translate(TESTGRID_X, 0); | 70 canvas->translate(TESTGRID_X, 0); |
| 61 testGrad(canvas, 0, 1, 1, 0); | 71 drawLinearGradient(canvas, 0, 1, 1, 0); |
| 72 | |
| 73 canvas->restore(); | |
| 74 canvas->translate(0, TESTGRID_Y); | |
| 75 canvas->save(); | |
| 76 | |
| 77 drawRadialGradient(canvas, 0, 0.5, 1, 0.5); | |
| 78 canvas->translate(TESTGRID_X, 0); | |
| 79 drawRadialGradient(canvas, 0.5, 0, 0.5, 1); | |
| 80 canvas->translate(TESTGRID_X, 0); | |
| 81 drawRadialGradient(canvas, 1, 0.5, 0, 0.5); | |
| 82 canvas->translate(TESTGRID_X, 0); | |
| 83 drawRadialGradient(canvas, 0.5, 1, 0.5, 0); | |
| 84 | |
| 85 canvas->restore(); | |
| 86 canvas->translate(0, TESTGRID_Y); | |
| 87 canvas->save(); | |
| 88 | |
| 89 drawRadialGradient(canvas, 0, 0, 1, 1); | |
| 90 canvas->translate(TESTGRID_X, 0); | |
| 91 drawRadialGradient(canvas, 1, 1, 0, 0); | |
| 92 canvas->translate(TESTGRID_X, 0); | |
| 93 drawRadialGradient(canvas, 1, 0, 0, 1); | |
| 94 canvas->translate(TESTGRID_X, 0); | |
| 95 drawRadialGradient(canvas, 0, 1, 1, 0); | |
| 62 } | 96 } |
| 63 | 97 |
| 64 virtual void simpleGrad(SkCanvas* canvas) { | 98 virtual void simpleGradient(SkCanvas* canvas) { |
| 65 SkPoint pts[2] = { | 99 SkPoint pts[2] = { |
| 66 { 100, 0 }, | 100 { 100, 0 }, |
| 67 { 0, 0 } | 101 { 0, 0 } |
| 68 }; | 102 }; |
| 69 SkMatrix shaderMat = SkMatrix(); | 103 SkMatrix shaderMat = SkMatrix(); |
| 70 shaderMat.setAll(1, 0, 0, | 104 shaderMat.setAll(1, 0, 0, |
| 71 0, 1, 0, | 105 0, 1, 0, |
| 72 0, 0, 1); | 106 0, 0, 1); |
| 73 SkRect rectGrad = { 0, 0, 100, 100 }; // very simple numbers | 107 SkRect rectGrad = { 0, 0, 100, 100 }; // very simple numbers |
| 74 | 108 |
| 75 SkShader* shader = SimpleGradient(pts); | 109 SkShader* shader = SimpleLinearGradient(pts); |
| 76 shader->setLocalMatrix(shaderMat); | 110 shader->setLocalMatrix(shaderMat); |
| 77 SkPaint paint; | 111 SkPaint paint; |
| 78 paint.setAntiAlias(true); | 112 paint.setAntiAlias(true); |
| 113 paint.setShader(shader); | |
| 114 canvas->drawRect(rectGrad, paint); | |
| 115 shader->unref(); | |
| 116 } | |
| 117 | |
| 118 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.
| |
| 119 SkPoint pts[2] = { | |
| 120 { x1, y1 }, | |
| 121 { x2, y2 } | |
| 122 }; | |
| 123 SkMatrix shaderMat = SkMatrix(); | |
| 124 shaderMat.setAll(138, 0, 43, | |
| 125 0, 106, 61, | |
| 126 0, 0, 1); | |
| 127 SkRect rectGrad = { 43, 61, 181, 167 }; // some nice prime numbers | |
| 128 | |
| 129 SkShader* shader = SimpleRadialGradient(pts); | |
| 130 shader->setLocalMatrix(shaderMat); | |
| 131 SkPaint paint; | |
| 132 paint.setAntiAlias(true); | |
| 79 paint.setShader(shader); | 133 paint.setShader(shader); |
| 80 canvas->drawRect(rectGrad, paint); | 134 canvas->drawRect(rectGrad, paint); |
| 81 shader->unref(); | 135 shader->unref(); |
| 82 } | 136 } |
| 83 | 137 |
| 84 virtual void testGrad(SkCanvas* canvas, int x1, int y1, int x2, int y2) { | 138 virtual void drawLinearGradient(SkCanvas* canvas, float x1, float y1, float x2, float y2) { |
| 85 SkPoint pts[2] = { | 139 SkPoint pts[2] = { |
| 86 { x1, y1 }, | 140 { x1, y1 }, |
| 87 { x2, y2 } | 141 { x2, y2 } |
| 88 }; | 142 }; |
| 89 SkMatrix shaderMat = SkMatrix(); | 143 SkMatrix shaderMat = SkMatrix(); |
| 90 shaderMat.setAll(138, 0, 43, | 144 shaderMat.setAll(138, 0, 43, |
| 91 0, 106, 61, | 145 0, 106, 61, |
| 92 0, 0, 1); | 146 0, 0, 1); |
| 93 SkRect rectGrad = { 43, 61, 181, 167 }; // some nice prime numbers | 147 SkRect rectGrad = { 43, 61, 181, 167 }; // some nice prime numbers |
| 94 | 148 |
| 95 SkShader* shader = SimpleGradient(pts); | 149 SkShader* shader = SimpleLinearGradient(pts); |
| 96 shader->setLocalMatrix(shaderMat); | 150 shader->setLocalMatrix(shaderMat); |
| 97 SkPaint paint; | 151 SkPaint paint; |
| 98 paint.setAntiAlias(true); | 152 paint.setAntiAlias(true); |
| 99 paint.setShader(shader); | 153 paint.setShader(shader); |
| 100 canvas->drawRect(rectGrad, paint); | 154 canvas->drawRect(rectGrad, paint); |
| 101 shader->unref(); | 155 shader->unref(); |
| 102 } | 156 } |
| 103 | 157 |
| 104 private: | 158 private: |
| 105 typedef GM INHERITED; | 159 typedef GM INHERITED; |
| 106 }; | 160 }; |
| 107 | 161 |
| 108 static GM* MyFactory(void*) { return new GradientMatrixGM; } | 162 static GM* MyFactory(void*) { return new GradientMatrixGM; } |
| 109 static GMRegistry reg(MyFactory); | 163 static GMRegistry reg(MyFactory); |
| 110 | 164 |
| 111 } | 165 } |
| OLD | NEW |