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; |
} |