Chromium Code Reviews| Index: src/effects/SkComposeImageFilter.cpp |
| diff --git a/src/effects/SkComposeImageFilter.cpp b/src/effects/SkComposeImageFilter.cpp |
| index 4a17e152de704d7b0369ea9ba3f2c731632ea0ec..66acd10d76d8f17145afcaf3a48f2b3d79741ce2 100644 |
| --- a/src/effects/SkComposeImageFilter.cpp |
| +++ b/src/effects/SkComposeImageFilter.cpp |
| @@ -13,6 +13,15 @@ |
| SkComposeImageFilter::~SkComposeImageFilter() { |
| } |
| +void SkComposeImageFilter::computeFastBounds(const SkRect& src, SkRect* dst) const { |
| + SkImageFilter* outer = getInput(0); |
| + SkImageFilter* inner = getInput(1); |
| + |
| + SkRect tmp; |
| + inner->computeFastBounds(src, &tmp); |
| + outer->computeFastBounds(tmp, dst); |
| +} |
| + |
| bool SkComposeImageFilter::onFilterImage(Proxy* proxy, |
| const SkBitmap& src, |
| const Context& ctx, |
| @@ -22,8 +31,19 @@ bool SkComposeImageFilter::onFilterImage(Proxy* proxy, |
| SkImageFilter* inner = getInput(1); |
| SkBitmap tmp; |
| - return inner->filterImage(proxy, src, ctx, &tmp, offset) && |
| - outer->filterImage(proxy, tmp, ctx, result, offset); |
| + SkIPoint innerOffset = SkIPoint::Make(0, 0); |
| + SkIPoint outerOffset = SkIPoint::Make(0, 0); |
| + if (!inner->filterImage(proxy, src, ctx, &tmp, &innerOffset)) |
| + return false; |
| + |
| + SkMatrix outerMatrix(ctx.ctm()); |
| + outerMatrix.postTranslate(SkIntToScalar(-innerOffset.x()), SkIntToScalar(-innerOffset.y())); |
| + Context outerContext(outerMatrix, ctx.clipBounds(), ctx.cache()); |
| + if (!outer->filterImage(proxy, tmp, outerContext, result, &outerOffset)) |
|
reed1
2015/02/12 21:01:19
nit: Skia style always uses { }
ajuma
2015/02/13 16:02:24
Done.
|
| + return false; |
| + |
| + *offset = innerOffset + outerOffset; |
| + return true; |
| } |
| bool SkComposeImageFilter::onFilterBounds(const SkIRect& src, |