| 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 | 7 |
| 8 #include "SkBitmap.h" | 8 #include "SkBitmap.h" |
| 9 #include "SkBlurImageFilter.h" | 9 #include "SkBlurImageFilter.h" |
| 10 #include "SkCanvas.h" | 10 #include "SkCanvas.h" |
| (...skipping 838 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 849 sk_sp<SkImageFilter> filter1(SkDilateImageFilter::Make(2, 2, nullptr)); | 849 sk_sp<SkImageFilter> filter1(SkDilateImageFilter::Make(2, 2, nullptr)); |
| 850 sk_sp<SkImageFilter> filter2(make_drop_shadow(std::move(filter1))); | 850 sk_sp<SkImageFilter> filter2(make_drop_shadow(std::move(filter1))); |
| 851 | 851 |
| 852 SkIRect bounds = SkIRect::MakeXYWH(0, 0, 100, 100); | 852 SkIRect bounds = SkIRect::MakeXYWH(0, 0, 100, 100); |
| 853 SkIRect expectedBounds = SkIRect::MakeXYWH(-132, -132, 234, 234); | 853 SkIRect expectedBounds = SkIRect::MakeXYWH(-132, -132, 234, 234); |
| 854 bounds = filter2->filterBounds(bounds, SkMatrix::I()); | 854 bounds = filter2->filterBounds(bounds, SkMatrix::I()); |
| 855 | 855 |
| 856 REPORTER_ASSERT(reporter, bounds == expectedBounds); | 856 REPORTER_ASSERT(reporter, bounds == expectedBounds); |
| 857 } | 857 } |
| 858 | 858 |
| 859 DEF_TEST(ImageFilterScaledBlurRadius, reporter) { |
| 860 // Each blur should spread 3*sigma, so 3 for the blur and 30 for the shadow |
| 861 // (before the CTM). Bounds should be computed correctly in the presence of |
| 862 // a (possibly negative) scale. |
| 863 sk_sp<SkImageFilter> blur(make_blur(nullptr)); |
| 864 sk_sp<SkImageFilter> dropShadow(make_drop_shadow(nullptr)); |
| 865 { |
| 866 // Uniform scale by 2. |
| 867 SkMatrix scaleMatrix; |
| 868 scaleMatrix.setScale(2, 2); |
| 869 SkIRect bounds = SkIRect::MakeLTRB(0, 0, 200, 200); |
| 870 |
| 871 SkIRect expectedBlurBounds = SkIRect::MakeLTRB(-6, -6, 206, 206); |
| 872 SkIRect blurBounds = blur->filterBounds( |
| 873 bounds, scaleMatrix, SkImageFilter::kForward_MapDirection); |
| 874 REPORTER_ASSERT(reporter, blurBounds == expectedBlurBounds); |
| 875 SkIRect reverseBlurBounds = blur->filterBounds( |
| 876 bounds, scaleMatrix, SkImageFilter::kReverse_MapDirection); |
| 877 REPORTER_ASSERT(reporter, reverseBlurBounds == expectedBlurBounds); |
| 878 |
| 879 SkIRect expectedShadowBounds = SkIRect::MakeLTRB(0, 0, 460, 460); |
| 880 SkIRect shadowBounds = dropShadow->filterBounds( |
| 881 bounds, scaleMatrix, SkImageFilter::kForward_MapDirection); |
| 882 REPORTER_ASSERT(reporter, shadowBounds == expectedShadowBounds); |
| 883 SkIRect expectedReverseShadowBounds = |
| 884 SkIRect::MakeLTRB(-260, -260, 200, 200); |
| 885 SkIRect reverseShadowBounds = dropShadow->filterBounds( |
| 886 bounds, scaleMatrix, SkImageFilter::kReverse_MapDirection); |
| 887 REPORTER_ASSERT(reporter, |
| 888 reverseShadowBounds == expectedReverseShadowBounds); |
| 889 } |
| 890 { |
| 891 // Vertical flip. |
| 892 SkMatrix scaleMatrix; |
| 893 scaleMatrix.setScale(1, -1); |
| 894 SkIRect bounds = SkIRect::MakeLTRB(0, -100, 100, 0); |
| 895 |
| 896 SkIRect expectedBlurBounds = SkIRect::MakeLTRB(-3, -103, 103, 3); |
| 897 SkIRect blurBounds = blur->filterBounds( |
| 898 bounds, scaleMatrix, SkImageFilter::kForward_MapDirection); |
| 899 REPORTER_ASSERT(reporter, blurBounds == expectedBlurBounds); |
| 900 SkIRect reverseBlurBounds = blur->filterBounds( |
| 901 bounds, scaleMatrix, SkImageFilter::kReverse_MapDirection); |
| 902 REPORTER_ASSERT(reporter, reverseBlurBounds == expectedBlurBounds); |
| 903 |
| 904 SkIRect expectedShadowBounds = SkIRect::MakeLTRB(0, -230, 230, 0); |
| 905 SkIRect shadowBounds = dropShadow->filterBounds( |
| 906 bounds, scaleMatrix, SkImageFilter::kForward_MapDirection); |
| 907 REPORTER_ASSERT(reporter, shadowBounds == expectedShadowBounds); |
| 908 SkIRect expectedReverseShadowBounds = |
| 909 SkIRect::MakeLTRB(-130, -100, 100, 130); |
| 910 SkIRect reverseShadowBounds = dropShadow->filterBounds( |
| 911 bounds, scaleMatrix, SkImageFilter::kReverse_MapDirection); |
| 912 REPORTER_ASSERT(reporter, |
| 913 reverseShadowBounds == expectedReverseShadowBounds); |
| 914 } |
| 915 } |
| 916 |
| 859 DEF_TEST(ImageFilterComposedBlurFastBounds, reporter) { | 917 DEF_TEST(ImageFilterComposedBlurFastBounds, reporter) { |
| 860 sk_sp<SkImageFilter> filter1(make_blur(nullptr)); | 918 sk_sp<SkImageFilter> filter1(make_blur(nullptr)); |
| 861 sk_sp<SkImageFilter> filter2(make_blur(nullptr)); | 919 sk_sp<SkImageFilter> filter2(make_blur(nullptr)); |
| 862 sk_sp<SkImageFilter> composedFilter(SkComposeImageFilter::Make(std::move(fil
ter1), | 920 sk_sp<SkImageFilter> composedFilter(SkComposeImageFilter::Make(std::move(fil
ter1), |
| 863 std::move(fil
ter2))); | 921 std::move(fil
ter2))); |
| 864 | 922 |
| 865 SkRect boundsSrc = SkRect::MakeWH(SkIntToScalar(100), SkIntToScalar(100)); | 923 SkRect boundsSrc = SkRect::MakeWH(SkIntToScalar(100), SkIntToScalar(100)); |
| 866 SkRect expectedBounds = SkRect::MakeXYWH( | 924 SkRect expectedBounds = SkRect::MakeXYWH( |
| 867 SkIntToScalar(-6), SkIntToScalar(-6), SkIntToScalar(112), SkIntToScalar(
112)); | 925 SkIntToScalar(-6), SkIntToScalar(-6), SkIntToScalar(112), SkIntToScalar(
112)); |
| 868 SkRect boundsDst = composedFilter->computeFastBounds(boundsSrc); | 926 SkRect boundsDst = composedFilter->computeFastBounds(boundsSrc); |
| (...skipping 927 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1796 { SkColorFilterImageFilter::Make(cf, blif), false }, | 1854 { SkColorFilterImageFilter::Make(cf, blif), false }, |
| 1797 { SkMergeImageFilter::Make(cfif, blif), false }, | 1855 { SkMergeImageFilter::Make(cfif, blif), false }, |
| 1798 { SkComposeImageFilter::Make(blif, cfif), false }, | 1856 { SkComposeImageFilter::Make(blif, cfif), false }, |
| 1799 }; | 1857 }; |
| 1800 | 1858 |
| 1801 for (const auto& rec : recs) { | 1859 for (const auto& rec : recs) { |
| 1802 const bool canHandle = rec.fFilter->canHandleComplexCTM(); | 1860 const bool canHandle = rec.fFilter->canHandleComplexCTM(); |
| 1803 REPORTER_ASSERT(reporter, canHandle == rec.fExpectCanHandle); | 1861 REPORTER_ASSERT(reporter, canHandle == rec.fExpectCanHandle); |
| 1804 } | 1862 } |
| 1805 } | 1863 } |
| OLD | NEW |