Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(849)

Unified Diff: src/effects/SkMergeImageFilter.cpp

Issue 920513003: Make filters use SkImage instead of SkBitmap Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Created 5 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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;
}

Powered by Google App Engine
This is Rietveld 408576698