1/* 2 * Copyright 2012 The Android Open Source Project 3 * 4 * Use of this source code is governed by a BSD-style license that can be 5 * found in the LICENSE file. 6 */ 7 8#ifndef SkDeviceImageFilterProxy_DEFINED 9#define SkDeviceImageFilterProxy_DEFINED 10 11#include "SkBitmapDevice.h" 12#include "SkDevice.h" 13#include "SkImageFilter.h" 14#include "SkSurfaceProps.h" 15 16class SkDeviceImageFilterProxy : public SkImageFilter::Proxy { 17public: 18 SkDeviceImageFilterProxy(SkBaseDevice* device, const SkSurfaceProps& props) 19 : fDevice(device) 20 , fProps(props.flags(), kUnknown_SkPixelGeometry) 21 {} 22 23 SkBaseDevice* createDevice(int w, int h) override { 24 SkBaseDevice::CreateInfo cinfo(SkImageInfo::MakeN32Premul(w, h), 25 SkBaseDevice::kNever_TileUsage, 26 kUnknown_SkPixelGeometry, 27 true /*forImageFilter*/); 28 SkBaseDevice* dev = fDevice->onCreateDevice(cinfo, NULL); 29 if (NULL == dev) { 30 dev = SkBitmapDevice::Create(cinfo.fInfo); 31 } 32 return dev; 33 } 34 bool canHandleImageFilter(const SkImageFilter* filter) override { 35 return fDevice->canHandleImageFilter(filter); 36 } 37 virtual bool filterImage(const SkImageFilter* filter, const SkBitmap& src, 38 const SkImageFilter::Context& ctx, 39 SkBitmap* result, SkIPoint* offset) override { 40 return fDevice->filterImage(filter, src, ctx, result, offset); 41 } 42 43 const SkSurfaceProps* surfaceProps() const override { 44 return &fProps; 45 } 46 47private: 48 SkBaseDevice* fDevice; 49 const SkSurfaceProps fProps; 50}; 51 52#endif 53