diff options
Diffstat (limited to 'src/core/SkBitmapDevice.cpp')
-rw-r--r-- | src/core/SkBitmapDevice.cpp | 13 |
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)) { |