remove subclassing from ImageFilter::Proxy
BUG=skia:
Review URL: https://codereview.chromium.org/1172693002
diff --git a/src/core/SkCanvas.cpp b/src/core/SkCanvas.cpp
index 26b76df..30778fc 100644
--- a/src/core/SkCanvas.cpp
+++ b/src/core/SkCanvas.cpp
@@ -9,7 +9,6 @@
#include "SkCanvasPriv.h"
#include "SkBitmapDevice.h"
#include "SkColorFilter.h"
-#include "SkDeviceImageFilterProxy.h"
#include "SkDeviceProperties.h"
#include "SkDraw.h"
#include "SkDrawable.h"
@@ -1245,7 +1244,7 @@
SkImageFilter* filter = paint->getImageFilter();
SkIPoint pos = { x - iter.getX(), y - iter.getY() };
if (filter && !dstDev->canHandleImageFilter(filter)) {
- SkDeviceImageFilterProxy proxy(dstDev, fProps);
+ SkImageFilter::Proxy proxy(dstDev, fProps);
SkBitmap dst;
SkIPoint offset = SkIPoint::Make(0, 0);
const SkBitmap& src = srcDev->accessBitmap(false);
@@ -1297,7 +1296,7 @@
SkImageFilter* filter = paint->getImageFilter();
SkIPoint pos = { x - iter.getX(), y - iter.getY() };
if (filter && !iter.fDevice->canHandleImageFilter(filter)) {
- SkDeviceImageFilterProxy proxy(iter.fDevice, fProps);
+ SkImageFilter::Proxy proxy(iter.fDevice, fProps);
SkBitmap dst;
SkIPoint offset = SkIPoint::Make(0, 0);
SkMatrix matrix = *iter.fMatrix;
diff --git a/src/core/SkDeviceImageFilterProxy.h b/src/core/SkDeviceImageFilterProxy.h
deleted file mode 100644
index 5d0a61e..0000000
--- a/src/core/SkDeviceImageFilterProxy.h
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * Copyright 2012 The Android Open Source Project
- *
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-
-#ifndef SkDeviceImageFilterProxy_DEFINED
-#define SkDeviceImageFilterProxy_DEFINED
-
-#include "SkBitmapDevice.h"
-#include "SkDevice.h"
-#include "SkImageFilter.h"
-#include "SkSurfaceProps.h"
-
-class SkDeviceImageFilterProxy : public SkImageFilter::Proxy {
-public:
- SkDeviceImageFilterProxy(SkBaseDevice* device, const SkSurfaceProps& props)
- : fDevice(device)
- , fProps(props.flags(), kUnknown_SkPixelGeometry)
- {}
-
- SkBaseDevice* createDevice(int w, int h) override {
- SkBaseDevice::CreateInfo cinfo(SkImageInfo::MakeN32Premul(w, h),
- SkBaseDevice::kNever_TileUsage,
- kUnknown_SkPixelGeometry,
- true /*forImageFilter*/);
- SkBaseDevice* dev = fDevice->onCreateDevice(cinfo, NULL);
- if (NULL == dev) {
- dev = SkBitmapDevice::Create(cinfo.fInfo);
- }
- return dev;
- }
- bool filterImage(const SkImageFilter* filter, const SkBitmap& src,
- const SkImageFilter::Context& ctx, SkBitmap* res, SkIPoint* offset) override {
- return fDevice->filterImage(filter, src, ctx, res, offset);
- }
- const SkSurfaceProps* surfaceProps() const override {
- return &fProps;
- }
-
-private:
- SkBaseDevice* fDevice;
- const SkSurfaceProps fProps;
-};
-
-#endif
diff --git a/src/core/SkImageFilter.cpp b/src/core/SkImageFilter.cpp
index 91b3bc3..f512204 100644
--- a/src/core/SkImageFilter.cpp
+++ b/src/core/SkImageFilter.cpp
@@ -523,3 +523,26 @@
void SkImageFilter::PurgeCache() {
cache.get()->purge();
}
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+#include "SkBitmapDevice.h"
+
+SkBaseDevice* SkImageFilter::Proxy::createDevice(int w, int h) {
+ SkBaseDevice::CreateInfo cinfo(SkImageInfo::MakeN32Premul(w, h),
+ SkBaseDevice::kNever_TileUsage,
+ kUnknown_SkPixelGeometry,
+ true /*forImageFilter*/);
+ SkBaseDevice* dev = fDevice->onCreateDevice(cinfo, NULL);
+ if (NULL == dev) {
+ dev = SkBitmapDevice::Create(cinfo.fInfo);
+ }
+ return dev;
+}
+
+bool SkImageFilter::Proxy::filterImage(const SkImageFilter* filter, const SkBitmap& src,
+ const SkImageFilter::Context& ctx,
+ SkBitmap* result, SkIPoint* offset) {
+ return fDevice->filterImage(filter, src, ctx, result, offset);
+}
+
diff --git a/src/effects/SkPictureImageFilter.cpp b/src/effects/SkPictureImageFilter.cpp
index baae6f8..cb61cdd 100644
--- a/src/effects/SkPictureImageFilter.cpp
+++ b/src/effects/SkPictureImageFilter.cpp
@@ -133,7 +133,7 @@
// 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, &proxy->surfaceProps(), SkCanvas::kDefault_InitFlags);
canvas.translate(-SkIntToScalar(deviceBounds.fLeft), -SkIntToScalar(deviceBounds.fTop));
canvas.concat(ctx.ctm());
@@ -156,14 +156,14 @@
// 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, &proxy->surfaceProps(), SkCanvas::kDefault_InitFlags);
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, &proxy->surfaceProps(), SkCanvas::kDefault_InitFlags);
canvas.translate(-SkIntToScalar(deviceBounds.fLeft), -SkIntToScalar(deviceBounds.fTop));
canvas.concat(ctx.ctm());
diff --git a/src/gpu/GrLayerHoister.cpp b/src/gpu/GrLayerHoister.cpp
index 67e3c19..5cc5fa3 100644
--- a/src/gpu/GrLayerHoister.cpp
+++ b/src/gpu/GrLayerHoister.cpp
@@ -11,7 +11,6 @@
#include "SkBigPicture.h"
#include "SkCanvas.h"
-#include "SkDeviceImageFilterProxy.h"
#include "SkDeviceProperties.h"
#include "SkGpuDevice.h"
#include "SkGrPixelRef.h"
@@ -315,7 +314,7 @@
SkAutoTUnref<SkImageFilter::Cache> cache(SkImageFilter::Cache::Create(kDefaultCacheSize));
SkImageFilter::Context filterContext(totMat, clipBounds, cache);
- SkDeviceImageFilterProxy proxy(device, SkSurfaceProps(0, kUnknown_SkPixelGeometry));
+ SkImageFilter::Proxy proxy(device, SkSurfaceProps(0, kUnknown_SkPixelGeometry));
const SkBitmap src = wrap_texture(layer->texture());
if (!layer->filter()->filterImage(&proxy, src, filterContext, &filteredBitmap, &offset)) {
diff --git a/src/gpu/SkGpuDevice.cpp b/src/gpu/SkGpuDevice.cpp
index beed2fa..8bd5b5e 100644
--- a/src/gpu/SkGpuDevice.cpp
+++ b/src/gpu/SkGpuDevice.cpp
@@ -18,7 +18,6 @@
#include "GrTextContext.h"
#include "GrTracing.h"
#include "SkCanvasPriv.h"
-#include "SkDeviceImageFilterProxy.h"
#include "SkDrawProcs.h"
#include "SkErrorInternals.h"
#include "SkGlyphCache.h"
@@ -1243,7 +1242,7 @@
// FIXME: plumb actual surface props such that we don't have to lie about the flags here
// (https://code.google.com/p/skia/issues/detail?id=3148).
- SkDeviceImageFilterProxy proxy(this, SkSurfaceProps(0, getLeakyProperties().pixelGeometry()));
+ SkImageFilter::Proxy proxy(this, SkSurfaceProps(0, getLeakyProperties().pixelGeometry()));
if (filter->canFilterImageGPU()) {
return filter->filterImageGPU(&proxy, wrap_texture(texture, width, height),