diff options
author | reed <reed@google.com> | 2016-04-25 12:29:38 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2016-04-25 12:29:38 -0700 |
commit | 1eca11659e217eca138c230525a52deb3d52b2d3 (patch) | |
tree | 8aff07ada39f79a971052c556dac84b7490cf676 | |
parent | 460f40507e5dfb1324681b4b1cbe7b431f69e668 (diff) |
share code with drawSpriteWithFilter
BUG=skia:
GOLD_TRYBOT_URL= https://gold.skia.org/search2?unt=true&query=source_type%3Dgm&master=false&issue=1920733003
Review URL: https://codereview.chromium.org/1920733003
-rw-r--r-- | src/core/SkCanvas.cpp | 25 |
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); |