aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar reed <reed@google.com>2016-04-25 12:29:38 -0700
committerGravatar Commit bot <commit-bot@chromium.org>2016-04-25 12:29:38 -0700
commit1eca11659e217eca138c230525a52deb3d52b2d3 (patch)
tree8aff07ada39f79a971052c556dac84b7490cf676
parent460f40507e5dfb1324681b4b1cbe7b431f69e668 (diff)
share code with drawSpriteWithFilter
-rw-r--r--src/core/SkCanvas.cpp25
1 files changed, 1 insertions, 24 deletions
diff --git a/src/core/SkCanvas.cpp b/src/core/SkCanvas.cpp
index 7552626057..3924260f80 100644
--- a/src/core/SkCanvas.cpp
+++ b/src/core/SkCanvas.cpp
@@ -1450,31 +1450,8 @@ void SkCanvas::internalDrawDevice(SkBaseDevice* srcDev, int x, int y,
SkImageFilter* filter = paint->getImageFilter();
SkIPoint pos = { x - iter.getX(), y - iter.getY() };
if (filter) {
- SkIPoint offset = SkIPoint::Make(0, 0);
const SkBitmap& srcBM = srcDev->accessBitmap(false);
- SkMatrix matrix = *iter.fMatrix;
- matrix.postTranslate(SkIntToScalar(-pos.x()), SkIntToScalar(-pos.y()));
- const SkIRect clipBounds = iter.fClip->getBounds().makeOffset(-pos.x(), -pos.y());
- SkAutoTUnref<SkImageFilter::Cache> cache(dstDev->getImageFilterCache());
- SkImageFilter::Context ctx(matrix, clipBounds, cache.get());
-
- sk_sp<SkSpecialImage> srcImg(SkSpecialImage::internal_fromBM(srcBM,
- &dstDev->surfaceProps()));
- if (!srcImg) {
- continue; // something disastrous happened
- }
-
- sk_sp<SkSpecialImage> resultImg(filter->filterImage(srcImg.get(), ctx, &offset));
- if (resultImg) {
- SkPaint tmpUnfiltered(*paint);
- tmpUnfiltered.setImageFilter(nullptr);
- SkBitmap resultBM;
- if (resultImg->internal_getBM(&resultBM)) {
- // TODO: add drawSprite(SkSpecialImage) to SkDevice? (see skbug.com/5073)
- dstDev->drawSprite(iter, resultBM, pos.x() + offset.x(), pos.y() + offset.y(),
- tmpUnfiltered);
- }
- }
+ dstDev->drawSpriteWithFilter(iter, srcBM, pos.x(), pos.y(), *paint);
} else if (deviceIsBitmapDevice) {
const SkBitmap& src = static_cast<SkBitmapDevice*>(srcDev)->fBitmap;
dstDev->drawSprite(iter, src, pos.x(), pos.y(), *paint);