aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/core/SkBitmapDevice.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/core/SkBitmapDevice.cpp')
-rw-r--r--src/core/SkBitmapDevice.cpp13
1 files changed, 7 insertions, 6 deletions
diff --git a/src/core/SkBitmapDevice.cpp b/src/core/SkBitmapDevice.cpp
index fe858989ff..3d66ba6dfc 100644
--- a/src/core/SkBitmapDevice.cpp
+++ b/src/core/SkBitmapDevice.cpp
@@ -379,12 +379,9 @@ void SkBitmapDevice::drawDevice(SkBaseDevice* device, int x, int y, const SkPain
SkASSERT(!origPaint.getImageFilter());
// todo: can we unify with similar adjustment in SkGpuDevice?
- const SkPaint* paint = &origPaint;
- SkTLazy<SkPaint> lazyP;
- if (origPaint.getMaskFilter()) {
- lazyP.set(origPaint);
- lazyP.get()->setMaskFilter(origPaint.getMaskFilter()->makeWithLocalMatrix(this->ctm()));
- paint = lazyP.get();
+ SkTCopyOnFirstWrite<SkPaint> paint(origPaint);
+ if (paint->getMaskFilter()) {
+ paint.writable()->setMaskFilter(paint->getMaskFilter()->makeWithLocalMatrix(this->ctm()));
}
BDDraw(this).drawSprite(static_cast<SkBitmapDevice*>(device)->fBitmap, x, y, *paint);
@@ -443,6 +440,10 @@ void SkBitmapDevice::drawSpecial(SkSpecialImage* src, int x, int y, const SkPain
y += offset.y();
}
+ if (paint->getMaskFilter()) {
+ paint.writable()->setMaskFilter(paint->getMaskFilter()->makeWithLocalMatrix(this->ctm()));
+ }
+
if (!clipImage) {
SkBitmap resultBM;
if (src->getROPixels(&resultBM)) {