| Index: src/effects/SkPictureImageFilter.cpp
|
| diff --git a/src/effects/SkPictureImageFilter.cpp b/src/effects/SkPictureImageFilter.cpp
|
| index e18600db6e24275b78b09fa4e4155c99cd02bc82..7b503560fef0edb9cd411b495d297bced26dde3e 100644
|
| --- a/src/effects/SkPictureImageFilter.cpp
|
| +++ b/src/effects/SkPictureImageFilter.cpp
|
| @@ -17,15 +17,15 @@ SkPictureImageFilter::SkPictureImageFilter(const SkPicture* picture, uint32_t un
|
| : INHERITED(0, 0, NULL, uniqueID)
|
| , fPicture(SkSafeRef(picture))
|
| , fCropRect(picture ? picture->cullRect() : SkRect::MakeEmpty())
|
| - , fPictureResolution(kDeviceSpace_PictureResolution) {
|
| + , fPictureMode(kDeviceSpace_PictureMode) {
|
| }
|
|
|
| SkPictureImageFilter::SkPictureImageFilter(const SkPicture* picture, const SkRect& cropRect,
|
| - uint32_t uniqueID, PictureResolution pictureResolution)
|
| + uint32_t uniqueID, PictureMode pictureMode)
|
| : INHERITED(0, 0, NULL, uniqueID)
|
| , fPicture(SkSafeRef(picture))
|
| , fCropRect(cropRect)
|
| - , fPictureResolution(pictureResolution) {
|
| + , fPictureMode(pictureMode) {
|
| }
|
|
|
| SkPictureImageFilter::~SkPictureImageFilter() {
|
| @@ -44,17 +44,17 @@ SkFlattenable* SkPictureImageFilter::CreateProc(SkReadBuffer& buffer) {
|
| buffer.validate(!buffer.readBool());
|
| }
|
| buffer.readRect(&cropRect);
|
| - PictureResolution pictureResolution;
|
| + PictureMode pictureMode;
|
| if (buffer.isVersionLT(SkReadBuffer::kPictureImageFilterResolution_Version)) {
|
| - pictureResolution = kDeviceSpace_PictureResolution;
|
| + pictureMode = kDeviceSpace_PictureMode;
|
| } else {
|
| - pictureResolution = (PictureResolution)buffer.readInt();
|
| + pictureMode = (PictureMode)buffer.readInt();
|
| }
|
|
|
| - if (pictureResolution == kLocalSpace_PictureResolution) {
|
| - return CreateForLocalSpace(picture, cropRect);
|
| + if (kDeviceSpace_PictureMode == pictureMode) {
|
| + return Create(picture, cropRect);
|
| }
|
| - return Create(picture, cropRect);
|
| + return CreateForLocalSpace(picture, cropRect, 0, pictureMode == kLocalSpacePixelated_PictureMode);
|
| }
|
|
|
| void SkPictureImageFilter::flatten(SkWriteBuffer& buffer) const {
|
| @@ -68,7 +68,7 @@ void SkPictureImageFilter::flatten(SkWriteBuffer& buffer) const {
|
| buffer.writeBool(false);
|
| }
|
| buffer.writeRect(fCropRect);
|
| - buffer.writeInt(fPictureResolution);
|
| + buffer.writeInt(fPictureMode);
|
| }
|
|
|
| bool SkPictureImageFilter::onFilterImage(Proxy* proxy, const SkBitmap&, const Context& ctx,
|
| @@ -95,11 +95,11 @@ bool SkPictureImageFilter::onFilterImage(Proxy* proxy, const SkBitmap&, const Co
|
| return false;
|
| }
|
|
|
| - if (kLocalSpace_PictureResolution == fPictureResolution &&
|
| - (ctx.ctm().getType() & ~SkMatrix::kTranslate_Mask)) {
|
| - drawPictureAtLocalResolution(proxy, device.get(), bounds, ctx);
|
| + if (kDeviceSpace_PictureMode == fPictureMode ||
|
| + 0 == (ctx.ctm().getType() & ~SkMatrix::kTranslate_Mask)) {
|
| + drawPictureAtDeviceResolution(proxy, device.get(), bounds, ctx);
|
| } else {
|
| - drawPictureAtDeviceResolution(proxy, device.get(), bounds, ctx);
|
| + drawPictureAtLocalResolution(proxy, device.get(), bounds, ctx);
|
| }
|
|
|
| *result = device.get()->accessBitmap(false);
|
| @@ -149,7 +149,9 @@ void SkPictureImageFilter::drawPictureAtLocalResolution(Proxy* proxy, SkBaseDevi
|
| canvas.translate(-SkIntToScalar(deviceBounds.fLeft), -SkIntToScalar(deviceBounds.fTop));
|
| canvas.concat(ctx.ctm());
|
| SkPaint paint;
|
| - paint.setFilterLevel(SkPaint::kLow_FilterLevel);
|
| - canvas.drawBitmap(localDevice.get()->accessBitmap(false), SkIntToScalar(localIBounds.fLeft), SkIntToScalar(localIBounds.fTop), &paint);
|
| + paint.setFilterLevel(kLocalSpacePixelated_PictureMode == fPictureMode ?
|
| + SkPaint::kNone_FilterLevel : SkPaint::kLow_FilterLevel);
|
| + canvas.drawBitmap(localDevice.get()->accessBitmap(false), SkIntToScalar(localIBounds.fLeft),
|
| + SkIntToScalar(localIBounds.fTop), &paint);
|
| //canvas.drawPicture(fPicture);
|
| }
|
|
|