Index: src/core/SkCanvas.cpp |
diff --git a/src/core/SkCanvas.cpp b/src/core/SkCanvas.cpp |
index 88dddf412a7ae663c1e34d343a8ddd953f8ca1dc..683fd0ca55d66fa36688ec6f212a02e7916dd946 100644 |
--- a/src/core/SkCanvas.cpp |
+++ b/src/core/SkCanvas.cpp |
@@ -1070,21 +1070,11 @@ bool SkCanvas::clipRectBounds(const SkRect* bounds, SaveFlags flags, |
const SkMatrix& ctm = fMCRec->fMatrix; // this->getTotalMatrix() |
-// This is a temporary hack, until individual filters can do their own |
-// bloating, when this will be removed. |
-#ifdef SK_SUPPORT_SRC_BOUNDS_BLOAT_FOR_IMAGEFILTERS |
- SkRect storage; |
-#endif |
if (imageFilter) { |
imageFilter->filterBounds(clipBounds, ctm, &clipBounds); |
-#ifdef SK_SUPPORT_SRC_BOUNDS_BLOAT_FOR_IMAGEFILTERS |
- if (bounds && imageFilter->canComputeFastBounds()) { |
- imageFilter->computeFastBounds(*bounds, &storage); |
- bounds = &storage; |
- } else { |
+ if (bounds && !imageFilter->canComputeFastBounds()) { |
bounds = nullptr; |
} |
-#endif |
} |
SkIRect ir; |
if (bounds) { |
@@ -1370,7 +1360,8 @@ void SkCanvas::internalDrawDevice(SkBaseDevice* srcDev, int x, int y, |
const SkBitmap& src = srcDev->accessBitmap(false); |
SkMatrix matrix = *iter.fMatrix; |
matrix.postTranslate(SkIntToScalar(-pos.x()), SkIntToScalar(-pos.y())); |
- SkIRect clipBounds = SkIRect::MakeWH(srcDev->width(), srcDev->height()); |
+ SkIRect clipBounds = iter.fClip->getBounds(); |
+ clipBounds.offset(-pos.x(), -pos.y()); |
SkAutoTUnref<SkImageFilter::Cache> cache(dstDev->getImageFilterCache()); |
SkImageFilter::Context ctx(matrix, clipBounds, cache.get(), |
SkImageFilter::kApprox_SizeConstraint); |