SkDeviceImageFilterProxy.h revision f7076a13e2d4269903b34ef2780e1c84723e4477
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 "SkDevice.h"
12#include "SkImageFilter.h"
13#include "SkSurfaceProps.h"
14
15class SkDeviceImageFilterProxy : public SkImageFilter::Proxy {
16public:
17    SkDeviceImageFilterProxy(SkBaseDevice* device, const SkSurfaceProps& props)
18        : fDevice(device)
19        , fProps(props.flags(),
20                 SkBaseDevice::CreateInfo::AdjustGeometry(SkImageInfo(),
21                                                          SkBaseDevice::kPossible_TileUsage,
22                                                          props.pixelGeometry()))
23    {}
24
25    SkBaseDevice* createDevice(int w, int h) SK_OVERRIDE {
26        SkBaseDevice::CreateInfo cinfo(SkImageInfo::MakeN32Premul(w, h),
27                                       SkBaseDevice::kPossible_TileUsage,
28                                       kUnknown_SkPixelGeometry);
29        return fDevice->onCreateDevice(cinfo, NULL);
30    }
31    bool canHandleImageFilter(const SkImageFilter* filter) SK_OVERRIDE {
32        return fDevice->canHandleImageFilter(filter);
33    }
34    virtual bool filterImage(const SkImageFilter* filter, const SkBitmap& src,
35                             const SkImageFilter::Context& ctx,
36                             SkBitmap* result, SkIPoint* offset) SK_OVERRIDE {
37        return fDevice->filterImage(filter, src, ctx, result, offset);
38    }
39
40    const SkSurfaceProps* surfaceProps() const SK_OVERRIDE {
41        return &fProps;
42    }
43
44private:
45    SkBaseDevice*  fDevice;
46    const SkSurfaceProps fProps;
47};
48
49#endif
50