| Index: src/effects/SkMergeImageFilter.cpp
|
| diff --git a/src/effects/SkMergeImageFilter.cpp b/src/effects/SkMergeImageFilter.cpp
|
| index f68d9133782ea25ad70b1019ef09e158cbd33506..3bba2cc227fb6eca94ccab734e9e5260bb7d01b9 100755
|
| --- a/src/effects/SkMergeImageFilter.cpp
|
| +++ b/src/effects/SkMergeImageFilter.cpp
|
| @@ -55,9 +55,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;
|
| }
|
| @@ -79,17 +80,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) {
|
| @@ -97,12 +92,15 @@ bool SkMergeImageFilter::onFilterImage(Proxy* proxy, const SkBitmap& src,
|
| } else {
|
| paint.setXfermode(NULL);
|
| }
|
| - canvas.drawSprite(*srcPtr, pos.x() - x0, pos.y() - y0, &paint);
|
| + canvas.drawImageAsSprite(*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;
|
| }
|
|
|
|
|