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 using namespace skiagm; | 10 using namespace skiagm; |
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
73 typedef SkShader* (*GradMaker)(const SkPoint pts[2], const GradData& data, SkSha
der::TileMode tm); | 73 typedef SkShader* (*GradMaker)(const SkPoint pts[2], const GradData& data, SkSha
der::TileMode tm); |
74 | 74 |
75 static const GradMaker gGradMakers[] = { | 75 static const GradMaker gGradMakers[] = { |
76 MakeLinear, MakeRadial, MakeSweep, Make2Radial, Make2Conical, | 76 MakeLinear, MakeRadial, MakeSweep, Make2Radial, Make2Conical, |
77 }; | 77 }; |
78 | 78 |
79 /////////////////////////////////////////////////////////////////////////////// | 79 /////////////////////////////////////////////////////////////////////////////// |
80 | 80 |
81 class GradientsNoTextureGM : public GM { | 81 class GradientsNoTextureGM : public GM { |
82 public: | 82 public: |
83 GradientsNoTextureGM() { | 83 GradientsNoTextureGM(bool dither) : fDither(dither) { |
84 this->setBGColor(sk_tool_utils::color_to_565(0xFFDDDDDD)); | 84 this->setBGColor(sk_tool_utils::color_to_565(0xFFDDDDDD)); |
85 } | 85 } |
86 | 86 |
87 protected: | 87 protected: |
88 | 88 |
89 SkString onShortName() override { return SkString("gradients_no_texture"); } | 89 SkString onShortName() override { |
| 90 return SkString(fDither ? "gradients_no_texture" : "gradients_no_texture
_nodither"); |
| 91 } |
| 92 |
90 SkISize onISize() override { return SkISize::Make(640, 615); } | 93 SkISize onISize() override { return SkISize::Make(640, 615); } |
91 | 94 |
92 void onDraw(SkCanvas* canvas) override { | 95 void onDraw(SkCanvas* canvas) override { |
93 static const SkPoint kPts[2] = { { 0, 0 }, | 96 static const SkPoint kPts[2] = { { 0, 0 }, |
94 { SkIntToScalar(50), SkIntToScalar(50)
} }; | 97 { SkIntToScalar(50), SkIntToScalar(50)
} }; |
95 static const SkShader::TileMode kTM = SkShader::kClamp_TileMode; | 98 static const SkShader::TileMode kTM = SkShader::kClamp_TileMode; |
96 SkRect kRect = { 0, 0, SkIntToScalar(50), SkIntToScalar(50) }; | 99 SkRect kRect = { 0, 0, SkIntToScalar(50), SkIntToScalar(50) }; |
97 SkPaint paint; | 100 SkPaint paint; |
98 paint.setAntiAlias(true); | 101 paint.setAntiAlias(true); |
| 102 paint.setDither(fDither); |
99 | 103 |
100 canvas->translate(SkIntToScalar(20), SkIntToScalar(20)); | 104 canvas->translate(SkIntToScalar(20), SkIntToScalar(20)); |
101 static const uint8_t kAlphas[] = { 0xff, 0x40 }; | 105 static const uint8_t kAlphas[] = { 0xff, 0x40 }; |
102 for (size_t a = 0; a < SK_ARRAY_COUNT(kAlphas); ++a) { | 106 for (size_t a = 0; a < SK_ARRAY_COUNT(kAlphas); ++a) { |
103 for (size_t i = 0; i < SK_ARRAY_COUNT(gGradData); ++i) { | 107 for (size_t i = 0; i < SK_ARRAY_COUNT(gGradData); ++i) { |
104 canvas->save(); | 108 canvas->save(); |
105 for (size_t j = 0; j < SK_ARRAY_COUNT(gGradMakers); ++j) { | 109 for (size_t j = 0; j < SK_ARRAY_COUNT(gGradMakers); ++j) { |
106 SkShader* shader = gGradMakers[j](kPts, gGradData[i], kTM); | 110 SkShader* shader = gGradMakers[j](kPts, gGradData[i], kTM); |
107 paint.setShader(shader)->unref(); | 111 paint.setShader(shader)->unref(); |
108 paint.setAlpha(kAlphas[a]); | 112 paint.setAlpha(kAlphas[a]); |
109 canvas->drawRect(kRect, paint); | 113 canvas->drawRect(kRect, paint); |
110 canvas->translate(0, SkIntToScalar(kRect.height() + 20)); | 114 canvas->translate(0, SkIntToScalar(kRect.height() + 20)); |
111 } | 115 } |
112 canvas->restore(); | 116 canvas->restore(); |
113 canvas->translate(SkIntToScalar(kRect.width() + 20), 0); | 117 canvas->translate(SkIntToScalar(kRect.width() + 20), 0); |
114 } | 118 } |
115 } | 119 } |
116 } | 120 } |
117 | 121 |
118 private: | 122 private: |
| 123 bool fDither; |
| 124 |
119 typedef GM INHERITED; | 125 typedef GM INHERITED; |
120 }; | 126 }; |
121 | 127 |
122 /////////////////////////////////////////////////////////////////////////////// | 128 /////////////////////////////////////////////////////////////////////////////// |
123 | 129 |
124 struct ColorPos { | 130 struct ColorPos { |
125 SkColor* fColors; | 131 SkColor* fColors; |
126 SkScalar* fPos; | 132 SkScalar* fPos; |
127 int fCount; | 133 int fCount; |
128 | 134 |
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
198 } | 204 } |
199 | 205 |
200 class GradientsManyColorsGM : public GM { | 206 class GradientsManyColorsGM : public GM { |
201 enum { | 207 enum { |
202 W = 800, | 208 W = 800, |
203 }; | 209 }; |
204 SkAutoTUnref<SkShader> fShader; | 210 SkAutoTUnref<SkShader> fShader; |
205 | 211 |
206 typedef void (*Proc)(ColorPos*); | 212 typedef void (*Proc)(ColorPos*); |
207 public: | 213 public: |
208 GradientsManyColorsGM() {} | 214 GradientsManyColorsGM(bool dither) : fDither(dither) {} |
209 | 215 |
210 protected: | 216 protected: |
211 | 217 |
212 SkString onShortName() override { return SkString("gradients_many"); } | 218 SkString onShortName() override { |
| 219 return SkString(fDither ? "gradients_many" : "gradients_many_nodither"); |
| 220 } |
| 221 |
213 SkISize onISize() override { return SkISize::Make(850, 100); } | 222 SkISize onISize() override { return SkISize::Make(850, 100); } |
214 | 223 |
215 void onDraw(SkCanvas* canvas) override { | 224 void onDraw(SkCanvas* canvas) override { |
216 const Proc procs[] = { | 225 const Proc procs[] = { |
217 make0, make1, make2, | 226 make0, make1, make2, |
218 }; | 227 }; |
219 const SkPoint pts[] = { | 228 const SkPoint pts[] = { |
220 { 0, 0 }, | 229 { 0, 0 }, |
221 { SkIntToScalar(W), 0 }, | 230 { SkIntToScalar(W), 0 }, |
222 }; | 231 }; |
223 const SkRect r = SkRect::MakeWH(SkIntToScalar(W), 30); | 232 const SkRect r = SkRect::MakeWH(SkIntToScalar(W), 30); |
224 | 233 |
225 SkPaint paint; | 234 SkPaint paint; |
| 235 paint.setDither(fDither); |
226 | 236 |
227 canvas->translate(20, 20); | 237 canvas->translate(20, 20); |
228 | 238 |
229 for (int i = 0; i <= 8; ++i) { | 239 for (int i = 0; i <= 8; ++i) { |
230 SkScalar x = r.width() * i / 8; | 240 SkScalar x = r.width() * i / 8; |
231 canvas->drawLine(x, 0, x, 10000, paint); | 241 canvas->drawLine(x, 0, x, 10000, paint); |
232 } | 242 } |
233 | 243 |
234 for (size_t i = 0; i < SK_ARRAY_COUNT(procs); ++i) { | 244 for (size_t i = 0; i < SK_ARRAY_COUNT(procs); ++i) { |
235 ColorPos rec; | 245 ColorPos rec; |
236 procs[i](&rec); | 246 procs[i](&rec); |
237 SkShader* s = SkGradientShader::CreateLinear(pts, rec.fColors, rec.f
Pos, rec.fCount, | 247 SkShader* s = SkGradientShader::CreateLinear(pts, rec.fColors, rec.f
Pos, rec.fCount, |
238 SkShader::kClamp_TileMo
de); | 248 SkShader::kClamp_TileMo
de); |
239 paint.setShader(s)->unref(); | 249 paint.setShader(s)->unref(); |
240 canvas->drawRect(r, paint); | 250 canvas->drawRect(r, paint); |
241 canvas->translate(0, r.height() + 20); | 251 canvas->translate(0, r.height() + 20); |
242 } | 252 } |
243 } | 253 } |
244 | 254 |
245 private: | 255 private: |
| 256 bool fDither; |
| 257 |
246 typedef GM INHERITED; | 258 typedef GM INHERITED; |
247 }; | 259 }; |
248 | 260 |
249 /////////////////////////////////////////////////////////////////////////////// | 261 /////////////////////////////////////////////////////////////////////////////// |
250 | 262 |
251 DEF_GM(return new GradientsNoTextureGM); | 263 DEF_GM(return new GradientsNoTextureGM(true);) |
252 DEF_GM(return new GradientsManyColorsGM); | 264 DEF_GM(return new GradientsNoTextureGM(false);) |
| 265 DEF_GM(return new GradientsManyColorsGM(true);) |
| 266 DEF_GM(return new GradientsManyColorsGM(false);) |
OLD | NEW |