OLD | NEW |
---|---|
1 | |
2 /* | 1 /* |
3 * Copyright 2011 Google Inc. | 2 * Copyright 2011 Google Inc. |
4 * | 3 * |
5 * 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 |
6 * found in the LICENSE file. | 5 * found in the LICENSE file. |
7 */ | 6 */ |
7 | |
8 #include "gm.h" | 8 #include "gm.h" |
9 #include "SkGradientShader.h" | 9 #include "SkGradientShader.h" |
10 | 10 |
11 namespace skiagm { | 11 namespace skiagm { |
12 | 12 |
13 struct GradData { | 13 struct GradData { |
14 int fCount; | 14 int fCount; |
15 const SkColor* fColors; | 15 const SkColor* fColors; |
16 const SkScalar* fPos; | 16 const SkScalar* fPos; |
17 }; | 17 }; |
(...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
142 canvas->translate(0, SkIntToScalar(120)); | 142 canvas->translate(0, SkIntToScalar(120)); |
143 } | 143 } |
144 canvas->restore(); | 144 canvas->restore(); |
145 canvas->translate(SkIntToScalar(120), 0); | 145 canvas->translate(SkIntToScalar(120), 0); |
146 } | 146 } |
147 } | 147 } |
148 | 148 |
149 private: | 149 private: |
150 typedef GM INHERITED; | 150 typedef GM INHERITED; |
151 }; | 151 }; |
152 DEF_GM( return new GradientsGM; ) | |
152 | 153 |
153 // Based on the original gradient slide, but with perspective applied to the | 154 // Based on the original gradient slide, but with perspective applied to the |
154 // gradient shaders' local matrices | 155 // gradient shaders' local matrices |
155 class GradientsLocalPerspectiveGM : public GM { | 156 class GradientsLocalPerspectiveGM : public GM { |
156 public: | 157 public: |
157 GradientsLocalPerspectiveGM() { | 158 GradientsLocalPerspectiveGM() { |
158 this->setBGColor(0xFFDDDDDD); | 159 this->setBGColor(0xFFDDDDDD); |
159 } | 160 } |
160 | 161 |
161 protected: | 162 protected: |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
197 canvas->translate(0, SkIntToScalar(120)); | 198 canvas->translate(0, SkIntToScalar(120)); |
198 } | 199 } |
199 canvas->restore(); | 200 canvas->restore(); |
200 canvas->translate(SkIntToScalar(120), 0); | 201 canvas->translate(SkIntToScalar(120), 0); |
201 } | 202 } |
202 } | 203 } |
203 | 204 |
204 private: | 205 private: |
205 typedef GM INHERITED; | 206 typedef GM INHERITED; |
206 }; | 207 }; |
208 DEF_GM( return new GradientsLocalPerspectiveGM; ) | |
207 | 209 |
208 // Based on the original gradient slide, but with perspective applied to | 210 // Based on the original gradient slide, but with perspective applied to |
209 // the view matrix | 211 // the view matrix |
210 class GradientsViewPerspectiveGM : public GradientsGM { | 212 class GradientsViewPerspectiveGM : public GradientsGM { |
211 protected: | 213 protected: |
212 SkString onShortName() { | 214 SkString onShortName() { |
213 return SkString("gradients_view_perspective"); | 215 return SkString("gradients_view_perspective"); |
214 } | 216 } |
215 | 217 |
216 virtual SkISize onISize() { return SkISize::Make(840, 500); } | 218 virtual SkISize onISize() { return SkISize::Make(840, 500); } |
217 | 219 |
218 virtual void onDraw(SkCanvas* canvas) { | 220 virtual void onDraw(SkCanvas* canvas) { |
219 SkMatrix perspective; | 221 SkMatrix perspective; |
220 perspective.setIdentity(); | 222 perspective.setIdentity(); |
221 perspective.setPerspY(SkScalarDiv(SK_Scalar1, SkIntToScalar(1000))); | 223 perspective.setPerspY(SkScalarDiv(SK_Scalar1, SkIntToScalar(1000))); |
222 perspective.setSkewX(SkScalarDiv(SkIntToScalar(8), SkIntToScalar(25))); | 224 perspective.setSkewX(SkScalarDiv(SkIntToScalar(8), SkIntToScalar(25))); |
223 canvas->concat(perspective); | 225 canvas->concat(perspective); |
224 INHERITED::onDraw(canvas); | 226 INHERITED::onDraw(canvas); |
225 } | 227 } |
226 | 228 |
227 private: | 229 private: |
228 typedef GradientsGM INHERITED; | 230 typedef GradientsGM INHERITED; |
229 }; | 231 }; |
232 DEF_GM( return new GradientsViewPerspectiveGM; ) | |
230 | 233 |
231 /* | 234 /* |
232 Inspired by this <canvas> javascript, where we need to detect that we are not | 235 Inspired by this <canvas> javascript, where we need to detect that we are not |
233 solving a quadratic equation, but must instead solve a linear (since our X^2 | 236 solving a quadratic equation, but must instead solve a linear (since our X^2 |
234 coefficient is 0) | 237 coefficient is 0) |
235 | 238 |
236 ctx.fillStyle = '#f00'; | 239 ctx.fillStyle = '#f00'; |
237 ctx.fillRect(0, 0, 100, 50); | 240 ctx.fillRect(0, 0, 100, 50); |
238 | 241 |
239 var g = ctx.createRadialGradient(-80, 25, 70, 0, 25, 150); | 242 var g = ctx.createRadialGradient(-80, 25, 70, 0, 25, 150); |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
274 pos, SK_ARRAY_COUNT (pos), | 277 pos, SK_ARRAY_COUNT (pos), |
275 SkShader::kClamp_Ti leMode); | 278 SkShader::kClamp_Ti leMode); |
276 SkPaint paint; | 279 SkPaint paint; |
277 paint.setShader(s)->unref(); | 280 paint.setShader(s)->unref(); |
278 canvas->drawPaint(paint); | 281 canvas->drawPaint(paint); |
279 } | 282 } |
280 | 283 |
281 private: | 284 private: |
282 typedef GM INHERITED; | 285 typedef GM INHERITED; |
283 }; | 286 }; |
287 DEF_GM( return new GradientsDegenrate2PointGM; ) | |
284 | 288 |
285 /// Tests correctness of *optimized* codepaths in gradients. | 289 /// Tests correctness of *optimized* codepaths in gradients. |
286 | 290 |
287 class ClampedGradientsGM : public GM { | 291 class ClampedGradientsGM : public GM { |
288 public: | 292 public: |
289 ClampedGradientsGM() {} | 293 ClampedGradientsGM() {} |
290 | 294 |
291 protected: | 295 protected: |
292 SkString onShortName() { return SkString("clamped_gradients"); } | 296 SkString onShortName() { return SkString("clamped_gradients"); } |
293 | 297 |
(...skipping 18 matching lines...) Expand all Loading... | |
312 SkIntToScalar(200), gColors, NULL, 5, | 316 SkIntToScalar(200), gColors, NULL, 5, |
313 SkShader::kClamp_TileMode); | 317 SkShader::kClamp_TileMode); |
314 paint.setShader(shader); | 318 paint.setShader(shader); |
315 canvas->drawRect(r, paint); | 319 canvas->drawRect(r, paint); |
316 shader->unref(); | 320 shader->unref(); |
317 } | 321 } |
318 | 322 |
319 private: | 323 private: |
320 typedef GM INHERITED; | 324 typedef GM INHERITED; |
321 }; | 325 }; |
326 DEF_GM( return new ClampedGradientsGM; ) | |
322 | 327 |
323 /// Checks quality of large radial gradients, which may display | 328 /// Checks quality of large radial gradients, which may display |
324 /// some banding. | 329 /// some banding. |
325 | 330 |
326 class RadialGradientGM : public GM { | 331 class RadialGradientGM : public GM { |
327 public: | 332 public: |
328 RadialGradientGM() {} | 333 RadialGradientGM() {} |
329 | 334 |
330 protected: | 335 protected: |
331 | 336 |
(...skipping 22 matching lines...) Expand all Loading... | |
354 SkShader::kClamp_TileMode); | 359 SkShader::kClamp_TileMode); |
355 paint.setShader(shader)->unref(); | 360 paint.setShader(shader)->unref(); |
356 SkRect r = { | 361 SkRect r = { |
357 0, 0, SkIntToScalar(dim.width()), SkIntToScalar(dim.height()) | 362 0, 0, SkIntToScalar(dim.width()), SkIntToScalar(dim.height()) |
358 }; | 363 }; |
359 canvas->drawRect(r, paint); | 364 canvas->drawRect(r, paint); |
360 } | 365 } |
361 private: | 366 private: |
362 typedef GM INHERITED; | 367 typedef GM INHERITED; |
363 }; | 368 }; |
364 | 369 DEF_GM( return new RadialGradientGM; ) |
365 | 370 |
366 class RadialGradient2GM : public GM { | 371 class RadialGradient2GM : public GM { |
367 public: | 372 public: |
368 RadialGradient2GM() {} | 373 RadialGradient2GM() {} |
369 | 374 |
370 protected: | 375 protected: |
371 | 376 |
372 SkString onShortName() override { return SkString("radial_gradient2"); } | 377 SkString onShortName() override { return SkString("radial_gradient2"); } |
373 SkISize onISize() override { return SkISize::Make(800, 400); } | 378 SkISize onISize() override { return SkISize::Make(800, 400); } |
374 void drawBG(SkCanvas* canvas) { | 379 void drawBG(SkCanvas* canvas) { |
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
418 canvas->drawCircle(cx, cy, radius, paint3); | 423 canvas->drawCircle(cx, cy, radius, paint3); |
419 canvas->drawCircle(cx, cy, radius, paint2); | 424 canvas->drawCircle(cx, cy, radius, paint2); |
420 | 425 |
421 canvas->translate(400, 0); | 426 canvas->translate(400, 0); |
422 } | 427 } |
423 } | 428 } |
424 | 429 |
425 private: | 430 private: |
426 typedef GM INHERITED; | 431 typedef GM INHERITED; |
427 }; | 432 }; |
433 DEF_GM( return new RadialGradient2GM; ) | |
428 | 434 |
429 /////////////////////////////////////////////////////////////////////////////// | 435 // Shallow radial (shows banding on raster) |
436 class RadialGradient3GM : public GM { | |
437 SkAutoTUnref<SkShader> fShader; | |
430 | 438 |
431 static GM* MyFactory(void*) { return new GradientsGM; } | 439 protected: |
432 static GMRegistry reg(MyFactory); | 440 SkString onShortName() override { return SkString("radial_gradient3"); } |
433 | 441 |
434 static GM* MyFactory2(void*) { return new GradientsDegenrate2PointGM; } | 442 SkISize onISize() override { return SkISize::Make(500, 500); } |
435 static GMRegistry reg2(MyFactory2); | |
436 | 443 |
437 static GM* MyFactory3(void*) { return new ClampedGradientsGM; } | 444 bool runAsBench() const override { return true; } |
438 static GMRegistry reg3(MyFactory3); | |
439 | 445 |
440 static GM* MyFactory4(void*) { return new RadialGradientGM; } | 446 void onOnceBeforeDraw() override { |
441 static GMRegistry reg4(MyFactory4); | 447 const SkPoint center = { 0, 0 }; |
448 const SkScalar kRadius = 3000; | |
449 const SkColor gColors[] = { 0xFFFFFFFF, 0xFF000000 }; | |
450 fShader.reset(SkGradientShader::CreateRadial(center, kRadius, gColors, N ULL, 2, | |
robertphillips
2015/04/23 18:48:18
missing space ?
| |
451 SkShader::kClamp_TileMode)); | |
452 } | |
442 | 453 |
443 static GM* MyFactory5(void*) { return new GradientsLocalPerspectiveGM; } | 454 void onDraw(SkCanvas* canvas) override { |
444 static GMRegistry reg5(MyFactory5); | 455 SkPaint paint; |
456 paint.setShader(fShader); | |
457 canvas->drawRect(SkRect::MakeWH(500, 500), paint); | |
458 } | |
459 | |
460 private: | |
461 typedef GM INHERITED; | |
462 }; | |
463 DEF_GM( return new RadialGradient3GM; ) | |
445 | 464 |
446 static GM* MyFactory6(void*) { return new GradientsViewPerspectiveGM; } | |
447 static GMRegistry reg6(MyFactory6); | |
448 | |
449 static GM* MyFactory7(void*) { return new RadialGradient2GM; } | |
450 static GMRegistry reg7(MyFactory7); | |
451 } | 465 } |
OLD | NEW |