OLD | NEW |
1 | 1 |
2 /* | 2 /* |
3 * Copyright 2011 Google Inc. | 3 * Copyright 2011 Google Inc. |
4 * | 4 * |
5 * Use of this source code is governed by a BSD-style license that can be | 5 * Use of this source code is governed by a BSD-style license that can be |
6 * found in the LICENSE file. | 6 * found in the LICENSE file. |
7 */ | 7 */ |
8 #include "gm.h" | 8 #include "gm.h" |
9 #include "SkGradientShader.h" | 9 #include "SkGradientShader.h" |
10 | 10 |
(...skipping 349 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
360 typedef GM INHERITED; | 360 typedef GM INHERITED; |
361 }; | 361 }; |
362 | 362 |
363 | 363 |
364 class RadialGradient2GM : public GM { | 364 class RadialGradient2GM : public GM { |
365 public: | 365 public: |
366 RadialGradient2GM() {} | 366 RadialGradient2GM() {} |
367 | 367 |
368 protected: | 368 protected: |
369 SkString onShortName() { return SkString("radial_gradient2"); } | 369 SkString onShortName() { return SkString("radial_gradient2"); } |
370 virtual SkISize onISize() { return make_isize(400, 400); } | 370 virtual SkISize onISize() { return make_isize(800, 400); } |
371 void drawBG(SkCanvas* canvas) { | 371 void drawBG(SkCanvas* canvas) { |
372 canvas->drawColor(0xFF000000); | 372 canvas->drawColor(0xFF000000); |
373 } | 373 } |
374 | 374 |
375 // Reproduces the example given in bug 7671058. | 375 // Reproduces the example given in bug 7671058. |
376 virtual void onDraw(SkCanvas* canvas) { | 376 virtual void onDraw(SkCanvas* canvas) { |
377 SkPaint paint1, paint2, paint3; | 377 SkPaint paint1, paint2, paint3; |
378 paint1.setStyle(SkPaint::kFill_Style); | 378 paint1.setStyle(SkPaint::kFill_Style); |
379 paint2.setStyle(SkPaint::kFill_Style); | 379 paint2.setStyle(SkPaint::kFill_Style); |
380 paint3.setStyle(SkPaint::kFill_Style); | 380 paint3.setStyle(SkPaint::kFill_Style); |
381 | 381 |
382 const SkColor sweep_colors[] = | 382 const SkColor sweep_colors[] = |
383 { 0xFFFF0000, 0xFFFFFF00, 0xFF00FF00, 0xFF00FFFF, 0xFF0000FF, 0xFFFF
00FF, 0xFFFF0000 }; | 383 { 0xFFFF0000, 0xFFFFFF00, 0xFF00FF00, 0xFF00FFFF, 0xFF0000FF, 0xFFFF
00FF, 0xFFFF0000 }; |
384 const SkColor colors1[] = { 0xFFFFFFFF, 0x00000000 }; | 384 const SkColor colors1[] = { 0xFFFFFFFF, 0x00000000 }; |
385 const SkColor colors2[] = { 0xFF000000, 0x00000000 }; | 385 const SkColor colors2[] = { 0xFF000000, 0x00000000 }; |
386 | 386 |
387 const SkScalar cx = 200, cy = 200, radius = 150; | 387 const SkScalar cx = 200, cy = 200, radius = 150; |
388 SkPoint center; | 388 SkPoint center; |
389 center.set(cx, cy); | 389 center.set(cx, cy); |
390 | 390 |
391 SkAutoTUnref<SkShader> sweep( | 391 // We can either interpolate endpoints and premultiply each point (defau
lt, more precision), |
392 SkGradientShader::CreateSweep(cx, cy, sweep_colors, | 392 // or premultiply the endpoints first, avoiding the need to premultiply
each point (cheap). |
393 NULL, SK_ARRAY_COUNT(sweep_colors)
)); | 393 const uint32_t flags[] = { 0, SkGradientShader::kInterpolateColorsInPrem
ul_Flag }; |
394 SkAutoTUnref<SkShader> radial1( | |
395 SkGradientShader::CreateRadial(center, radius, colors1, | |
396 NULL, SK_ARRAY_COUNT(colors1), | |
397 SkShader::kClamp_TileMode)); | |
398 SkAutoTUnref<SkShader> radial2( | |
399 SkGradientShader::CreateRadial(center, radius, colors2, | |
400 NULL, SK_ARRAY_COUNT(colors2), | |
401 SkShader::kClamp_TileMode)); | |
402 paint1.setShader(sweep); | |
403 paint2.setShader(radial1); | |
404 paint3.setShader(radial2); | |
405 | 394 |
406 canvas->drawCircle(cx, cy, radius, paint1); | 395 for (size_t i = 0; i < SK_ARRAY_COUNT(flags); i++) { |
407 canvas->drawCircle(cx, cy, radius, paint3); | 396 SkAutoTUnref<SkShader> sweep( |
408 canvas->drawCircle(cx, cy, radius, paint2); | 397 SkGradientShader::CreateSweep(cx, cy, sweep_colors, |
| 398 NULL, SK_ARRAY_COUNT(sweep_col
ors), |
| 399 NULL, flags[i])); |
| 400 SkAutoTUnref<SkShader> radial1( |
| 401 SkGradientShader::CreateRadial(center, radius, colors1, |
| 402 NULL, SK_ARRAY_COUNT(colors1)
, |
| 403 SkShader::kClamp_TileMode, |
| 404 NULL, flags[i])); |
| 405 SkAutoTUnref<SkShader> radial2( |
| 406 SkGradientShader::CreateRadial(center, radius, colors2, |
| 407 NULL, SK_ARRAY_COUNT(colors2)
, |
| 408 SkShader::kClamp_TileMode, |
| 409 NULL, flags[i])); |
| 410 paint1.setShader(sweep); |
| 411 paint2.setShader(radial1); |
| 412 paint3.setShader(radial2); |
| 413 |
| 414 canvas->drawCircle(cx, cy, radius, paint1); |
| 415 canvas->drawCircle(cx, cy, radius, paint3); |
| 416 canvas->drawCircle(cx, cy, radius, paint2); |
| 417 |
| 418 canvas->translate(400, 0); |
| 419 } |
409 } | 420 } |
410 | 421 |
411 private: | 422 private: |
412 typedef GM INHERITED; | 423 typedef GM INHERITED; |
413 }; | 424 }; |
414 | 425 |
415 /////////////////////////////////////////////////////////////////////////////// | 426 /////////////////////////////////////////////////////////////////////////////// |
416 | 427 |
417 static GM* MyFactory(void*) { return new GradientsGM; } | 428 static GM* MyFactory(void*) { return new GradientsGM; } |
418 static GMRegistry reg(MyFactory); | 429 static GMRegistry reg(MyFactory); |
419 | 430 |
420 static GM* MyFactory2(void*) { return new GradientsDegenrate2PointGM; } | 431 static GM* MyFactory2(void*) { return new GradientsDegenrate2PointGM; } |
421 static GMRegistry reg2(MyFactory2); | 432 static GMRegistry reg2(MyFactory2); |
422 | 433 |
423 static GM* MyFactory3(void*) { return new ClampedGradientsGM; } | 434 static GM* MyFactory3(void*) { return new ClampedGradientsGM; } |
424 static GMRegistry reg3(MyFactory3); | 435 static GMRegistry reg3(MyFactory3); |
425 | 436 |
426 static GM* MyFactory4(void*) { return new RadialGradientGM; } | 437 static GM* MyFactory4(void*) { return new RadialGradientGM; } |
427 static GMRegistry reg4(MyFactory4); | 438 static GMRegistry reg4(MyFactory4); |
428 | 439 |
429 static GM* MyFactory5(void*) { return new GradientsLocalPerspectiveGM; } | 440 static GM* MyFactory5(void*) { return new GradientsLocalPerspectiveGM; } |
430 static GMRegistry reg5(MyFactory5); | 441 static GMRegistry reg5(MyFactory5); |
431 | 442 |
432 static GM* MyFactory6(void*) { return new GradientsViewPerspectiveGM; } | 443 static GM* MyFactory6(void*) { return new GradientsViewPerspectiveGM; } |
433 static GMRegistry reg6(MyFactory6); | 444 static GMRegistry reg6(MyFactory6); |
434 | 445 |
435 static GM* MyFactory7(void*) { return new RadialGradient2GM; } | 446 static GM* MyFactory7(void*) { return new RadialGradient2GM; } |
436 static GMRegistry reg7(MyFactory7); | 447 static GMRegistry reg7(MyFactory7); |
437 } | 448 } |
OLD | NEW |