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 |