SkDeviceImageFilterProxy.h revision 706d98ef5b4a62cbbbd5a2393c32b0660b8a7fc7
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(), kUnknown_SkPixelGeometry)
20    {}
21
22    SkBaseDevice* createDevice(int w, int h) SK_OVERRIDE {
23        SkBaseDevice::CreateInfo cinfo(SkImageInfo::MakeN32Premul(w, h),
24                                       SkBaseDevice::kPossible_TileUsage,
25                                       kUnknown_SkPixelGeometry);
26        return fDevice->onCreateDevice(cinfo, NULL);
27    }
28    bool canHandleImageFilter(const SkImageFilter* filter) SK_OVERRIDE {
29        return fDevice->canHandleImageFilter(filter);
30    }
31    virtual bool filterImage(const SkImageFilter* filter, const SkBitmap& src,
32                             const SkImageFilter::Context& ctx,
33                             SkBitmap* result, SkIPoint* offset) SK_OVERRIDE {
34        return fDevice->filterImage(filter, src, ctx, result, offset);
35    }
36
37    const SkSurfaceProps* surfaceProps() const SK_OVERRIDE {
38        return &fProps;
39    }
40
41private:
42    SkBaseDevice*  fDevice;
43    const SkSurfaceProps fProps;
44};
45
46#endif
47