diff options
-rw-r--r-- | src/effects/SkBlurImageFilter.cpp | 6 | ||||
-rw-r--r-- | src/effects/SkDropShadowImageFilter.cpp | 6 | ||||
-rw-r--r-- | src/effects/SkMorphologyImageFilter.cpp | 6 | ||||
-rw-r--r-- | tests/ImageFilterTest.cpp | 44 |
4 files changed, 9 insertions, 53 deletions
diff --git a/src/effects/SkBlurImageFilter.cpp b/src/effects/SkBlurImageFilter.cpp index 8787ccec8c..71bc8114df 100644 --- a/src/effects/SkBlurImageFilter.cpp +++ b/src/effects/SkBlurImageFilter.cpp @@ -253,13 +253,13 @@ void SkBlurImageFilter::computeFastBounds(const SkRect& src, SkRect* dst) const bool SkBlurImageFilter::onFilterBounds(const SkIRect& src, const SkMatrix& ctm, SkIRect* dst) const { SkIRect bounds = src; + if (getInput(0) && !getInput(0)->filterBounds(src, ctm, &bounds)) { + return false; + } SkVector sigma = SkVector::Make(fSigma.width(), fSigma.height()); ctm.mapVectors(&sigma, 1); bounds.outset(SkScalarCeilToInt(SkScalarMul(sigma.x(), SkIntToScalar(3))), SkScalarCeilToInt(SkScalarMul(sigma.y(), SkIntToScalar(3)))); - if (getInput(0) && !getInput(0)->filterBounds(bounds, ctm, &bounds)) { - return false; - } *dst = bounds; return true; } diff --git a/src/effects/SkDropShadowImageFilter.cpp b/src/effects/SkDropShadowImageFilter.cpp index 29d685becc..f1ebae8d97 100644 --- a/src/effects/SkDropShadowImageFilter.cpp +++ b/src/effects/SkDropShadowImageFilter.cpp @@ -121,6 +121,9 @@ void SkDropShadowImageFilter::computeFastBounds(const SkRect& src, SkRect* dst) bool SkDropShadowImageFilter::onFilterBounds(const SkIRect& src, const SkMatrix& ctm, SkIRect* dst) const { SkIRect bounds = src; + if (getInput(0) && !getInput(0)->filterBounds(src, ctm, &bounds)) { + return false; + } SkVector offsetVec = SkVector::Make(fDx, fDy); ctm.mapVectors(&offsetVec, 1); bounds.offset(-SkScalarCeilToInt(offsetVec.x()), @@ -130,9 +133,6 @@ bool SkDropShadowImageFilter::onFilterBounds(const SkIRect& src, const SkMatrix& bounds.outset(SkScalarCeilToInt(SkScalarMul(sigma.x(), SkIntToScalar(3))), SkScalarCeilToInt(SkScalarMul(sigma.y(), SkIntToScalar(3)))); bounds.join(src); - if (getInput(0) && !getInput(0)->filterBounds(bounds, ctm, &bounds)) { - return false; - } *dst = bounds; return true; } diff --git a/src/effects/SkMorphologyImageFilter.cpp b/src/effects/SkMorphologyImageFilter.cpp index 6a6dd4d451..eef2a7d623 100644 --- a/src/effects/SkMorphologyImageFilter.cpp +++ b/src/effects/SkMorphologyImageFilter.cpp @@ -248,13 +248,13 @@ void SkMorphologyImageFilter::computeFastBounds(const SkRect& src, SkRect* dst) bool SkMorphologyImageFilter::onFilterBounds(const SkIRect& src, const SkMatrix& ctm, SkIRect* dst) const { SkIRect bounds = src; + if (getInput(0) && !getInput(0)->filterBounds(src, ctm, &bounds)) { + return false; + } SkVector radius = SkVector::Make(SkIntToScalar(this->radius().width()), SkIntToScalar(this->radius().height())); ctm.mapVectors(&radius, 1); bounds.outset(SkScalarCeilToInt(radius.x()), SkScalarCeilToInt(radius.y())); - if (getInput(0) && !getInput(0)->filterBounds(bounds, ctm, &bounds)) { - return false; - } *dst = bounds; return true; } diff --git a/tests/ImageFilterTest.cpp b/tests/ImageFilterTest.cpp index e7e0f84385..f87f99ce98 100644 --- a/tests/ImageFilterTest.cpp +++ b/tests/ImageFilterTest.cpp @@ -469,50 +469,6 @@ DEF_TEST(ImageFilterDrawMatrixBBH, reporter) { } } -static SkImageFilter* makeBlur(SkImageFilter* input = NULL) { - return SkBlurImageFilter::Create(SK_Scalar1, SK_Scalar1, input); -} - -static SkImageFilter* makeDropShadow(SkImageFilter* input = NULL) { - return SkDropShadowImageFilter::Create( - SkIntToScalar(100), SkIntToScalar(100), - SkIntToScalar(10), SkIntToScalar(10), - SK_ColorBLUE, input); -} - -DEF_TEST(ImageFilterBlurThenShadowBounds, reporter) { - SkAutoTUnref<SkImageFilter> filter1(makeBlur()); - SkAutoTUnref<SkImageFilter> filter2(makeDropShadow(filter1.get())); - - SkIRect bounds = SkIRect::MakeXYWH(0, 0, 100, 100); - SkIRect expectedBounds = SkIRect::MakeXYWH(-133, -133, 236, 236); - filter2->filterBounds(bounds, SkMatrix(), &bounds); - - REPORTER_ASSERT(reporter, bounds == expectedBounds); -} - -DEF_TEST(ImageFilterShadowThenBlurBounds, reporter) { - SkAutoTUnref<SkImageFilter> filter1(makeDropShadow()); - SkAutoTUnref<SkImageFilter> filter2(makeBlur(filter1.get())); - - SkIRect bounds = SkIRect::MakeXYWH(0, 0, 100, 100); - SkIRect expectedBounds = SkIRect::MakeXYWH(-133, -133, 236, 236); - filter2->filterBounds(bounds, SkMatrix(), &bounds); - - REPORTER_ASSERT(reporter, bounds == expectedBounds); -} - -DEF_TEST(ImageFilterDilateThenBlurBounds, reporter) { - SkAutoTUnref<SkImageFilter> filter1(SkDilateImageFilter::Create(2, 2)); - SkAutoTUnref<SkImageFilter> filter2(makeDropShadow(filter1.get())); - - SkIRect bounds = SkIRect::MakeXYWH(0, 0, 100, 100); - SkIRect expectedBounds = SkIRect::MakeXYWH(-132, -132, 234, 234); - filter2->filterBounds(bounds, SkMatrix(), &bounds); - - REPORTER_ASSERT(reporter, bounds == expectedBounds); -} - static void drawBlurredRect(SkCanvas* canvas) { SkAutoTUnref<SkImageFilter> filter(SkBlurImageFilter::Create(SkIntToScalar(8), 0)); SkPaint filterPaint; |