Index: src/effects/SkPictureImageFilter.cpp |
diff --git a/src/effects/SkPictureImageFilter.cpp b/src/effects/SkPictureImageFilter.cpp |
index 91f4dc9f29756fc4c9008da3af0a35464b7b9311..bf1ba8d7eb9a168cc4c161bd732d7bfd062deb94 100644 |
--- a/src/effects/SkPictureImageFilter.cpp |
+++ b/src/effects/SkPictureImageFilter.cpp |
@@ -110,9 +110,9 @@ bool SkPictureImageFilter::onFilterImage(Proxy* proxy, const SkBitmap&, const Co |
if (kDeviceSpace_PictureResolution == fPictureResolution || |
0 == (ctx.ctm().getType() & ~SkMatrix::kTranslate_Mask)) { |
- drawPictureAtDeviceResolution(proxy, device.get(), bounds, ctx); |
+ this->drawPictureAtDeviceResolution(device.get(), bounds, ctx); |
} else { |
- drawPictureAtLocalResolution(proxy, device.get(), bounds, ctx); |
+ this->drawPictureAtLocalResolution(proxy, device.get(), bounds, ctx); |
} |
*result = device.get()->accessBitmap(false); |
@@ -121,13 +121,10 @@ bool SkPictureImageFilter::onFilterImage(Proxy* proxy, const SkBitmap&, const Co |
return true; |
} |
-void SkPictureImageFilter::drawPictureAtDeviceResolution(Proxy* proxy, SkBaseDevice* device, |
+void SkPictureImageFilter::drawPictureAtDeviceResolution(SkBaseDevice* device, |
const SkIRect& deviceBounds, |
const Context& ctx) const { |
- // Pass explicit surface props, as the simplified canvas constructor discards device properties. |
- // FIXME: switch back to the public constructor (and unfriend) after |
- // https://code.google.com/p/skia/issues/detail?id=3142 is fixed. |
- SkCanvas canvas(device, &proxy->surfaceProps(), SkCanvas::kDefault_InitFlags); |
+ SkCanvas canvas(device); |
canvas.translate(-SkIntToScalar(deviceBounds.fLeft), -SkIntToScalar(deviceBounds.fTop)); |
canvas.concat(ctx.ctm()); |
@@ -138,26 +135,23 @@ void SkPictureImageFilter::drawPictureAtLocalResolution(Proxy* proxy, SkBaseDevi |
const SkIRect& deviceBounds, |
const Context& ctx) const { |
SkMatrix inverseCtm; |
- if (!ctx.ctm().invert(&inverseCtm)) |
+ if (!ctx.ctm().invert(&inverseCtm)) { |
return; |
+ } |
+ |
SkRect localBounds = SkRect::Make(ctx.clipBounds()); |
inverseCtm.mapRect(&localBounds); |
- if (!localBounds.intersect(fCropRect)) |
+ if (!localBounds.intersect(fCropRect)) { |
return; |
+ } |
SkIRect localIBounds = localBounds.roundOut(); |
SkAutoTUnref<SkBaseDevice> localDevice(proxy->createDevice(localIBounds.width(), localIBounds.height())); |
- // Pass explicit surface props, as the simplified canvas constructor discards device properties. |
- // FIXME: switch back to the public constructor (and unfriend) after |
- // https://code.google.com/p/skia/issues/detail?id=3142 is fixed. |
- SkCanvas localCanvas(localDevice, &proxy->surfaceProps(), SkCanvas::kDefault_InitFlags); |
+ SkCanvas localCanvas(localDevice); |
localCanvas.translate(-SkIntToScalar(localIBounds.fLeft), -SkIntToScalar(localIBounds.fTop)); |
localCanvas.drawPicture(fPicture); |
- // Pass explicit surface props, as the simplified canvas constructor discards device properties. |
- // FIXME: switch back to the public constructor (and unfriend) after |
- // https://code.google.com/p/skia/issues/detail?id=3142 is fixed. |
- SkCanvas canvas(device, &proxy->surfaceProps(), SkCanvas::kDefault_InitFlags); |
+ SkCanvas canvas(device); |
canvas.translate(-SkIntToScalar(deviceBounds.fLeft), -SkIntToScalar(deviceBounds.fTop)); |
canvas.concat(ctx.ctm()); |
@@ -165,7 +159,6 @@ void SkPictureImageFilter::drawPictureAtLocalResolution(Proxy* proxy, SkBaseDevi |
paint.setFilterQuality(fFilterQuality); |
canvas.drawBitmap(localDevice.get()->accessBitmap(false), SkIntToScalar(localIBounds.fLeft), |
SkIntToScalar(localIBounds.fTop), &paint); |
- //canvas.drawPicture(fPicture); |
} |
#ifndef SK_IGNORE_TO_STRING |