aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSkia_Android Canary Bot <31977622648@project.gserviceaccount.com>2015-05-15 17:41:42 +0000
committerSkia_Android Canary Bot <31977622648@project.gserviceaccount.com>2015-05-15 17:41:42 +0000
commit998e463d23c909b258d3196367ff9d28a1fda711 (patch)
tree5543bc5f707c691d2ff983b5d27dcdacc186dc9a
parent0bc1f6d8f95df7e4d95a9cde084dd01951ac747e (diff)
parentdaa57bfd4204f5a7d304c580bcf5ad99d0121e1f (diff)
downloadskia-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.h9
-rw-r--r--src/core/SkCanvas.cpp11
-rw-r--r--src/core/SkDeviceImageFilterProxy.h2
-rw-r--r--src/core/SkMatrixImageFilter.cpp8
-rw-r--r--src/core/SkMatrixImageFilter.h2
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;