| 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 |