diff options
author | Skia_Android Canary Bot <31977622648@project.gserviceaccount.com> | 2015-05-15 17:41:42 +0000 |
---|---|---|
committer | Skia_Android Canary Bot <31977622648@project.gserviceaccount.com> | 2015-05-15 17:41:42 +0000 |
commit | 998e463d23c909b258d3196367ff9d28a1fda711 (patch) | |
tree | 5543bc5f707c691d2ff983b5d27dcdacc186dc9a | |
parent | 0bc1f6d8f95df7e4d95a9cde084dd01951ac747e (diff) | |
parent | daa57bfd4204f5a7d304c580bcf5ad99d0121e1f (diff) | |
download | skia-998e463d23c909b258d3196367ff9d28a1fda711.tar.gz |
Merge "Revert of antialias matrix-image-filter to get smooth diagonals (patchset #6 id:80002 of https://codereview.chromium.org/1134743003/)" into master-skia
https://skia.googlesource.com/skia/+/daa57bfd4204f5a7d304c580bcf5ad99d0121e1f
Change-Id: Ie50d2ebf0cfe1608cb134d3114bb57868ef8fe11
-rw-r--r-- | include/core/SkImageFilter.h | 9 | ||||
-rw-r--r-- | src/core/SkCanvas.cpp | 11 | ||||
-rw-r--r-- | src/core/SkDeviceImageFilterProxy.h | 2 | ||||
-rw-r--r-- | src/core/SkMatrixImageFilter.cpp | 8 | ||||
-rw-r--r-- | src/core/SkMatrixImageFilter.h | 2 |
5 files changed, 7 insertions, 25 deletions
diff --git a/include/core/SkImageFilter.h b/include/core/SkImageFilter.h index bc2fae89f5..dab46ae716 100644 --- a/include/core/SkImageFilter.h +++ b/include/core/SkImageFilter.h @@ -81,9 +81,6 @@ public: public: virtual ~Proxy() {}; - /** - * The returned device will be zero-initialized (transparent black) - */ virtual SkBaseDevice* createDevice(int width, int height) = 0; // returns true if the proxy can handle this filter natively virtual bool canHandleImageFilter(const SkImageFilter*) = 0; @@ -347,12 +344,6 @@ protected: private: bool usesSrcInput() const { return fUsesSrcInput; } - // Hack to optimize how we saveLayer, remove when no longer needed by SkCanvas - bool mayDrawWithMatrix() const { return this->onMayDrawWithMatrix(); } - // Return true if the subclass may draw the src transformed (e.g. w/ matrix) - virtual bool onMayDrawWithMatrix() const { return false; } - friend class SkCanvas; - typedef SkFlattenable INHERITED; int fInputCount; SkImageFilter** fInputs; diff --git a/src/core/SkCanvas.cpp b/src/core/SkCanvas.cpp index 8849aba915..34d6aaa0ab 100644 --- a/src/core/SkCanvas.cpp +++ b/src/core/SkCanvas.cpp @@ -992,8 +992,6 @@ void SkCanvas::internalSaveLayer(const SkRect* bounds, const SkPaint* paint, Sav flags |= kClipToLayer_SaveFlag; #endif - SkImageFilter* imgf = paint ? paint->getImageFilter() : NULL; - // do this before we create the layer. We don't call the public save() since // that would invoke a possibly overridden virtual this->internalSave(); @@ -1001,7 +999,7 @@ void SkCanvas::internalSaveLayer(const SkRect* bounds, const SkPaint* paint, Sav fDeviceCMDirty = true; SkIRect ir; - if (!this->clipRectBounds(bounds, flags, &ir, imgf)) { + if (!this->clipRectBounds(bounds, flags, &ir, paint ? paint->getImageFilter() : NULL)) { return; } @@ -1015,7 +1013,7 @@ void SkCanvas::internalSaveLayer(const SkRect* bounds, const SkPaint* paint, Sav SkPixelGeometry geo = fProps.pixelGeometry(); if (paint) { // TODO: perhaps add a query to filters so we might preserve opaqueness... - if (imgf || paint->getColorFilter()) { + if (paint->getImageFilter() || paint->getColorFilter()) { isOpaque = false; geo = kUnknown_SkPixelGeometry; } @@ -1031,10 +1029,7 @@ void SkCanvas::internalSaveLayer(const SkRect* bounds, const SkPaint* paint, Sav bool forceSpriteOnRestore = false; { - SkBaseDevice::TileUsage usage = SkBaseDevice::kNever_TileUsage; - if (imgf && imgf->mayDrawWithMatrix()) { - usage = SkBaseDevice::kPossible_TileUsage; - } + const SkBaseDevice::TileUsage usage = SkBaseDevice::kNever_TileUsage; const SkBaseDevice::CreateInfo createInfo = SkBaseDevice::CreateInfo(info, usage, geo); SkBaseDevice* newDev = device->onCreateDevice(createInfo, paint); if (NULL == newDev) { diff --git a/src/core/SkDeviceImageFilterProxy.h b/src/core/SkDeviceImageFilterProxy.h index d77f3f62cd..79ff957564 100644 --- a/src/core/SkDeviceImageFilterProxy.h +++ b/src/core/SkDeviceImageFilterProxy.h @@ -21,8 +21,6 @@ public: {} SkBaseDevice* createDevice(int w, int h) override { - // Our contract is to return a zero-initialized device, so we request iPremul_AlphaType - // which is the signal to the fDevice to perform this init. SkBaseDevice::CreateInfo cinfo(SkImageInfo::MakeN32Premul(w, h), SkBaseDevice::kNever_TileUsage, kUnknown_SkPixelGeometry, diff --git a/src/core/SkMatrixImageFilter.cpp b/src/core/SkMatrixImageFilter.cpp index 1e76362285..a61867e041 100644 --- a/src/core/SkMatrixImageFilter.cpp +++ b/src/core/SkMatrixImageFilter.cpp @@ -76,13 +76,13 @@ bool SkMatrixImageFilter::onFilterImage(Proxy* proxy, return false; } - SkPaint paint; - paint.setFilterQuality(fFilterQuality); - paint.setAntiAlias(true); // since we may be rotated, we definitely want a smooth edge - SkCanvas canvas(device.get()); canvas.translate(-SkIntToScalar(dstBounds.x()), -SkIntToScalar(dstBounds.y())); canvas.concat(matrix); + SkPaint paint; + + paint.setXfermodeMode(SkXfermode::kSrc_Mode); + paint.setFilterQuality(fFilterQuality); canvas.drawBitmap(src, srcRect.x(), srcRect.y(), &paint); *result = device.get()->accessBitmap(false); diff --git a/src/core/SkMatrixImageFilter.h b/src/core/SkMatrixImageFilter.h index 1f55685628..012a36057d 100644 --- a/src/core/SkMatrixImageFilter.h +++ b/src/core/SkMatrixImageFilter.h @@ -57,8 +57,6 @@ protected: SkIRect* dst) const override; private: - bool onMayDrawWithMatrix() const override { return true; } - SkMatrix fTransform; SkFilterQuality fFilterQuality; typedef SkImageFilter INHERITED; |