OLD | NEW |
1 /* | 1 /* |
2 * Copyright 2011 Google Inc. | 2 * Copyright 2011 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 | 7 |
8 #include "SkBlurMask.h" | 8 #include "SkBlurMask.h" |
9 #include "SkBlurMaskFilter.h" | 9 #include "SkBlurMaskFilter.h" |
10 #include "SkBlurDrawLooper.h" | 10 #include "SkBlurDrawLooper.h" |
(...skipping 400 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
411 if (kNormal_SkBlurStyle != style) { | 411 if (kNormal_SkBlurStyle != style) { |
412 return; // blurdrawlooper only supports normal | 412 return; // blurdrawlooper only supports normal |
413 } | 413 } |
414 | 414 |
415 const SkColor color = 0xFF335577; | 415 const SkColor color = 0xFF335577; |
416 const SkScalar dx = 10; | 416 const SkScalar dx = 10; |
417 const SkScalar dy = -5; | 417 const SkScalar dy = -5; |
418 const SkBlurQuality quality = blurMaskFilterFlags_as_quality(blurMaskFilterF
lags); | 418 const SkBlurQuality quality = blurMaskFilterFlags_as_quality(blurMaskFilterF
lags); |
419 uint32_t flags = blurMaskFilterFlags_to_blurDrawLooperFlags(blurMaskFilterFl
ags); | 419 uint32_t flags = blurMaskFilterFlags_to_blurDrawLooperFlags(blurMaskFilterFl
ags); |
420 | 420 |
421 SkAutoTUnref<SkDrawLooper> lp(SkBlurDrawLooper::Create(color, sigma, dx, dy,
flags)); | 421 sk_sp<SkDrawLooper> lp(SkBlurDrawLooper::Make(color, sigma, dx, dy, flags)); |
422 | 422 |
423 const bool expectSuccess = sigma > 0 && | 423 const bool expectSuccess = sigma > 0 && |
424 0 == (flags & SkBlurDrawLooper::kIgnoreTransform_
BlurFlag); | 424 0 == (flags & SkBlurDrawLooper::kIgnoreTransform_
BlurFlag); |
425 | 425 |
426 if (nullptr == lp.get()) { | 426 if (nullptr == lp) { |
427 REPORTER_ASSERT(reporter, sigma <= 0); | 427 REPORTER_ASSERT(reporter, sigma <= 0); |
428 } else { | 428 } else { |
429 SkDrawLooper::BlurShadowRec rec; | 429 SkDrawLooper::BlurShadowRec rec; |
430 bool success = lp->asABlurShadow(&rec); | 430 bool success = lp->asABlurShadow(&rec); |
431 REPORTER_ASSERT(reporter, success == expectSuccess); | 431 REPORTER_ASSERT(reporter, success == expectSuccess); |
432 if (success) { | 432 if (success) { |
433 REPORTER_ASSERT(reporter, rec.fSigma == sigma); | 433 REPORTER_ASSERT(reporter, rec.fSigma == sigma); |
434 REPORTER_ASSERT(reporter, rec.fOffset.x() == dx); | 434 REPORTER_ASSERT(reporter, rec.fOffset.x() == dx); |
435 REPORTER_ASSERT(reporter, rec.fOffset.y() == dy); | 435 REPORTER_ASSERT(reporter, rec.fOffset.y() == dy); |
436 REPORTER_ASSERT(reporter, rec.fColor == color); | 436 REPORTER_ASSERT(reporter, rec.fColor == color); |
437 REPORTER_ASSERT(reporter, rec.fStyle == style); | 437 REPORTER_ASSERT(reporter, rec.fStyle == style); |
438 REPORTER_ASSERT(reporter, rec.fQuality == quality); | 438 REPORTER_ASSERT(reporter, rec.fQuality == quality); |
439 } | 439 } |
440 } | 440 } |
441 } | 441 } |
442 | 442 |
443 static void test_delete_looper(skiatest::Reporter* reporter, SkDrawLooper* lp, S
kScalar sigma, | 443 static void test_looper(skiatest::Reporter* reporter, sk_sp<SkDrawLooper> lp, Sk
Scalar sigma, |
444 SkBlurStyle style, SkBlurQuality quality, bool ex
pectSuccess) { | 444 SkBlurStyle style, SkBlurQuality quality, bool expectSuc
cess) { |
445 SkDrawLooper::BlurShadowRec rec; | 445 SkDrawLooper::BlurShadowRec rec; |
446 bool success = lp->asABlurShadow(&rec); | 446 bool success = lp->asABlurShadow(&rec); |
447 REPORTER_ASSERT(reporter, success == expectSuccess); | 447 REPORTER_ASSERT(reporter, success == expectSuccess); |
448 if (success != expectSuccess) { | 448 if (success != expectSuccess) { |
449 lp->asABlurShadow(&rec); | 449 lp->asABlurShadow(&rec); |
450 } | 450 } |
451 if (success) { | 451 if (success) { |
452 REPORTER_ASSERT(reporter, rec.fSigma == sigma); | 452 REPORTER_ASSERT(reporter, rec.fSigma == sigma); |
453 REPORTER_ASSERT(reporter, rec.fStyle == style); | 453 REPORTER_ASSERT(reporter, rec.fStyle == style); |
454 REPORTER_ASSERT(reporter, rec.fQuality == quality); | 454 REPORTER_ASSERT(reporter, rec.fQuality == quality); |
455 } | 455 } |
456 lp->unref(); | |
457 } | 456 } |
458 | 457 |
459 static void make_noop_layer(SkLayerDrawLooper::Builder* builder) { | 458 static void make_noop_layer(SkLayerDrawLooper::Builder* builder) { |
460 SkLayerDrawLooper::LayerInfo info; | 459 SkLayerDrawLooper::LayerInfo info; |
461 | 460 |
462 info.fPaintBits = 0; | 461 info.fPaintBits = 0; |
463 info.fColorMode = SkXfermode::kDst_Mode; | 462 info.fColorMode = SkXfermode::kDst_Mode; |
464 builder->addLayer(info); | 463 builder->addLayer(info); |
465 } | 464 } |
466 | 465 |
467 static void make_blur_layer(SkLayerDrawLooper::Builder* builder, SkMaskFilter* m
f) { | 466 static void make_blur_layer(SkLayerDrawLooper::Builder* builder, SkMaskFilter* m
f) { |
468 SkLayerDrawLooper::LayerInfo info; | 467 SkLayerDrawLooper::LayerInfo info; |
469 | 468 |
470 info.fPaintBits = SkLayerDrawLooper::kMaskFilter_Bit; | 469 info.fPaintBits = SkLayerDrawLooper::kMaskFilter_Bit; |
471 info.fColorMode = SkXfermode::kSrc_Mode; | 470 info.fColorMode = SkXfermode::kSrc_Mode; |
472 SkPaint* paint = builder->addLayer(info); | 471 SkPaint* paint = builder->addLayer(info); |
473 paint->setMaskFilter(mf); | 472 paint->setMaskFilter(mf); |
474 } | 473 } |
475 | 474 |
476 static void test_layerDrawLooper(skiatest::Reporter* reporter, SkMaskFilter* mf,
SkScalar sigma, | 475 static void test_layerDrawLooper(skiatest::Reporter* reporter, SkMaskFilter* mf,
SkScalar sigma, |
477 SkBlurStyle style, SkBlurQuality quality, bool
expectSuccess) { | 476 SkBlurStyle style, SkBlurQuality quality, bool
expectSuccess) { |
478 | 477 |
479 SkLayerDrawLooper::LayerInfo info; | 478 SkLayerDrawLooper::LayerInfo info; |
480 SkLayerDrawLooper::Builder builder; | 479 SkLayerDrawLooper::Builder builder; |
481 | 480 |
482 // 1 layer is too few | 481 // 1 layer is too few |
483 make_noop_layer(&builder); | 482 make_noop_layer(&builder); |
484 test_delete_looper(reporter, builder.detachLooper(), sigma, style, quality,
false); | 483 test_looper(reporter, builder.detach(), sigma, style, quality, false); |
485 | 484 |
486 // 2 layers is good, but need blur | 485 // 2 layers is good, but need blur |
487 make_noop_layer(&builder); | 486 make_noop_layer(&builder); |
488 make_noop_layer(&builder); | 487 make_noop_layer(&builder); |
489 test_delete_looper(reporter, builder.detachLooper(), sigma, style, quality,
false); | 488 test_looper(reporter, builder.detach(), sigma, style, quality, false); |
490 | 489 |
491 // 2 layers is just right | 490 // 2 layers is just right |
492 make_noop_layer(&builder); | 491 make_noop_layer(&builder); |
493 make_blur_layer(&builder, mf); | 492 make_blur_layer(&builder, mf); |
494 test_delete_looper(reporter, builder.detachLooper(), sigma, style, quality,
expectSuccess); | 493 test_looper(reporter, builder.detach(), sigma, style, quality, expectSuccess
); |
495 | 494 |
496 // 3 layers is too many | 495 // 3 layers is too many |
497 make_noop_layer(&builder); | 496 make_noop_layer(&builder); |
498 make_blur_layer(&builder, mf); | 497 make_blur_layer(&builder, mf); |
499 make_noop_layer(&builder); | 498 make_noop_layer(&builder); |
500 test_delete_looper(reporter, builder.detachLooper(), sigma, style, quality,
false); | 499 test_looper(reporter, builder.detach(), sigma, style, quality, false); |
501 } | 500 } |
502 | 501 |
503 DEF_TEST(BlurAsABlur, reporter) { | 502 DEF_TEST(BlurAsABlur, reporter) { |
504 const SkBlurStyle styles[] = { | 503 const SkBlurStyle styles[] = { |
505 kNormal_SkBlurStyle, kSolid_SkBlurStyle, kOuter_SkBlurStyle, kInner_SkBl
urStyle | 504 kNormal_SkBlurStyle, kSolid_SkBlurStyle, kOuter_SkBlurStyle, kInner_SkBl
urStyle |
506 }; | 505 }; |
507 const SkScalar sigmas[] = { | 506 const SkScalar sigmas[] = { |
508 // values <= 0 should not success for a blur | 507 // values <= 0 should not success for a blur |
509 -1, 0, 0.5f, 2 | 508 -1, 0, 0.5f, 2 |
510 }; | 509 }; |
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
573 | 572 |
574 SkPaint p; | 573 SkPaint p; |
575 p.setMaskFilter(SkBlurMaskFilter::Create(kNormal_SkBlurStyle, 0.01f))->unref
(); | 574 p.setMaskFilter(SkBlurMaskFilter::Create(kNormal_SkBlurStyle, 0.01f))->unref
(); |
576 | 575 |
577 canvas->drawRRect(rr, p); | 576 canvas->drawRRect(rr, p); |
578 } | 577 } |
579 | 578 |
580 #endif | 579 #endif |
581 | 580 |
582 ////////////////////////////////////////////////////////////////////////////////
/////////// | 581 ////////////////////////////////////////////////////////////////////////////////
/////////// |
OLD | NEW |