| Index: src/effects/SkMergeImageFilter.cpp
|
| diff --git a/src/effects/SkMergeImageFilter.cpp b/src/effects/SkMergeImageFilter.cpp
|
| index 7034e158e5ef48e95d49007c180f09bee1443a05..5d7c752edab06186995ae1f3ccaf8d8a86ab209b 100755
|
| --- a/src/effects/SkMergeImageFilter.cpp
|
| +++ b/src/effects/SkMergeImageFilter.cpp
|
| @@ -56,9 +56,10 @@ SkMergeImageFilter::~SkMergeImageFilter() {
|
| }
|
| }
|
|
|
| -bool SkMergeImageFilter::onFilterImage(Proxy* proxy, const SkBitmap& src,
|
| +bool SkMergeImageFilter::onFilterImage(Proxy* proxy, const SkImage* src,
|
| const Context& ctx,
|
| - SkBitmap* result, SkIPoint* offset) const {
|
| + SkAutoTUnref<const SkImage>& result,
|
| + SkIPoint* offset) const {
|
| if (countInputs() < 1) {
|
| return false;
|
| }
|
| @@ -80,17 +81,11 @@ bool SkMergeImageFilter::onFilterImage(Proxy* proxy, const SkBitmap& src,
|
|
|
| int inputCount = countInputs();
|
| for (int i = 0; i < inputCount; ++i) {
|
| - SkBitmap tmp;
|
| - const SkBitmap* srcPtr;
|
| + SkAutoTUnref<const SkImage> filteredImage(SkRef(src));
|
| SkIPoint pos = SkIPoint::Make(0, 0);
|
| SkImageFilter* filter = getInput(i);
|
| - if (filter) {
|
| - if (!filter->filterImage(proxy, src, ctx, &tmp, &pos)) {
|
| - return false;
|
| - }
|
| - srcPtr = &tmp;
|
| - } else {
|
| - srcPtr = &src;
|
| + if (filter && !filter->filterImage(proxy, src, ctx, filteredImage, &pos)) {
|
| + return false;
|
| }
|
|
|
| if (fModes) {
|
| @@ -98,12 +93,15 @@ bool SkMergeImageFilter::onFilterImage(Proxy* proxy, const SkBitmap& src,
|
| } else {
|
| paint.setXfermode(NULL);
|
| }
|
| - canvas.drawSprite(*srcPtr, pos.x() - x0, pos.y() - y0, &paint);
|
| + canvas.drawSprite(*filteredImage, pos.x() - x0, pos.y() - y0, &paint);
|
| }
|
| -
|
| + SkImage* image = dst->newImageSnapshot();
|
| + if (NULL == image) {
|
| + return false;
|
| + }
|
| + result.reset(image);
|
| offset->fX = bounds.left();
|
| offset->fY = bounds.top();
|
| - *result = dst->accessBitmap(false);
|
| return true;
|
| }
|
|
|
|
|