| Index: src/effects/SkMergeImageFilter.cpp
|
| diff --git a/src/effects/SkMergeImageFilter.cpp b/src/effects/SkMergeImageFilter.cpp
|
| index 7034e158e5ef48e95d49007c180f09bee1443a05..a5e645f2dfa3d2f3ddef899c3eb3d70f4b1dd969 100755
|
| --- a/src/effects/SkMergeImageFilter.cpp
|
| +++ b/src/effects/SkMergeImageFilter.cpp
|
| @@ -7,7 +7,7 @@
|
|
|
| #include "SkMergeImageFilter.h"
|
| #include "SkCanvas.h"
|
| -#include "SkDevice.h"
|
| +#include "SkSurface.h"
|
| #include "SkReadBuffer.h"
|
| #include "SkWriteBuffer.h"
|
| #include "SkValidationUtils.h"
|
| @@ -56,9 +56,9 @@ SkMergeImageFilter::~SkMergeImageFilter() {
|
| }
|
| }
|
|
|
| -bool SkMergeImageFilter::onFilterImage(Proxy* proxy, const SkBitmap& src,
|
| +bool SkMergeImageFilter::onFilterImage(Proxy* proxy, SkImage& src,
|
| const Context& ctx,
|
| - SkBitmap* result, SkIPoint* offset) const {
|
| + SkAutoTUnref<SkImage>& result, SkIPoint* offset) const {
|
| if (countInputs() < 1) {
|
| return false;
|
| }
|
| @@ -71,24 +71,24 @@ bool SkMergeImageFilter::onFilterImage(Proxy* proxy, const SkBitmap& src,
|
| const int x0 = bounds.left();
|
| const int y0 = bounds.top();
|
|
|
| - SkAutoTUnref<SkBaseDevice> dst(proxy->createDevice(bounds.width(), bounds.height()));
|
| - if (NULL == dst) {
|
| + SkAutoTUnref<SkSurface> surface(proxy->createSurface(bounds.width(), bounds.height()));
|
| + if (NULL == surface) {
|
| return false;
|
| }
|
| - SkCanvas canvas(dst);
|
| + SkCanvas* canvas = surface->getCanvas();
|
| SkPaint paint;
|
|
|
| int inputCount = countInputs();
|
| for (int i = 0; i < inputCount; ++i) {
|
| - SkBitmap tmp;
|
| - const SkBitmap* srcPtr;
|
| + SkAutoTUnref<SkImage> tmp;
|
| + SkImage* srcPtr;
|
| SkIPoint pos = SkIPoint::Make(0, 0);
|
| SkImageFilter* filter = getInput(i);
|
| if (filter) {
|
| - if (!filter->filterImage(proxy, src, ctx, &tmp, &pos)) {
|
| + if (!filter->filterImage(proxy, src, ctx, tmp, &pos)) {
|
| return false;
|
| }
|
| - srcPtr = &tmp;
|
| + srcPtr = tmp.get();
|
| } else {
|
| srcPtr = &src;
|
| }
|
| @@ -98,12 +98,15 @@ bool SkMergeImageFilter::onFilterImage(Proxy* proxy, const SkBitmap& src,
|
| } else {
|
| paint.setXfermode(NULL);
|
| }
|
| - canvas.drawSprite(*srcPtr, pos.x() - x0, pos.y() - y0, &paint);
|
| + canvas->drawImage(srcPtr, pos.x() - x0, pos.y() - y0, &paint);
|
| }
|
| -
|
| + SkImage* image = surface->newImageSnapshot(SkSurface::kYes_Budgeted);
|
| + if (NULL == image) {
|
| + return false;
|
| + }
|
| + result.reset(image);
|
| offset->fX = bounds.left();
|
| offset->fY = bounds.top();
|
| - *result = dst->accessBitmap(false);
|
| return true;
|
| }
|
|
|
|
|