19c39744a00573b7133fc765b0a9d50a0ceace7b8senorblanco@chromium.org/*
29c39744a00573b7133fc765b0a9d50a0ceace7b8senorblanco@chromium.org * Copyright 2012 The Android Open Source Project
39c39744a00573b7133fc765b0a9d50a0ceace7b8senorblanco@chromium.org *
49c39744a00573b7133fc765b0a9d50a0ceace7b8senorblanco@chromium.org * Use of this source code is governed by a BSD-style license that can be
59c39744a00573b7133fc765b0a9d50a0ceace7b8senorblanco@chromium.org * found in the LICENSE file.
69c39744a00573b7133fc765b0a9d50a0ceace7b8senorblanco@chromium.org */
79c39744a00573b7133fc765b0a9d50a0ceace7b8senorblanco@chromium.org
89c39744a00573b7133fc765b0a9d50a0ceace7b8senorblanco@chromium.org#ifndef SkDeviceImageFilterProxy_DEFINED
99c39744a00573b7133fc765b0a9d50a0ceace7b8senorblanco@chromium.org#define SkDeviceImageFilterProxy_DEFINED
109c39744a00573b7133fc765b0a9d50a0ceace7b8senorblanco@chromium.org
1161f501f8c675da8d5915e5e7fd32dfdb113f1cfbreed#include "SkBitmapDevice.h"
122d97bc139a7de5813468bd3dbfd0037351ae5606fmalita#include "SkDevice.h"
139c39744a00573b7133fc765b0a9d50a0ceace7b8senorblanco@chromium.org#include "SkImageFilter.h"
142d97bc139a7de5813468bd3dbfd0037351ae5606fmalita#include "SkSurfaceProps.h"
159c39744a00573b7133fc765b0a9d50a0ceace7b8senorblanco@chromium.org
169c39744a00573b7133fc765b0a9d50a0ceace7b8senorblanco@chromium.orgclass SkDeviceImageFilterProxy : public SkImageFilter::Proxy {
179c39744a00573b7133fc765b0a9d50a0ceace7b8senorblanco@chromium.orgpublic:
182d97bc139a7de5813468bd3dbfd0037351ae5606fmalita    SkDeviceImageFilterProxy(SkBaseDevice* device, const SkSurfaceProps& props)
192d97bc139a7de5813468bd3dbfd0037351ae5606fmalita        : fDevice(device)
20706d98ef5b4a62cbbbd5a2393c32b0660b8a7fc7reed        , fProps(props.flags(), kUnknown_SkPixelGeometry)
212d97bc139a7de5813468bd3dbfd0037351ae5606fmalita    {}
229c39744a00573b7133fc765b0a9d50a0ceace7b8senorblanco@chromium.org
2336352bf5e38f45a70ee4f4fc132a38048d38206dmtklein    SkBaseDevice* createDevice(int w, int h) override {
24b2db898573e3cdcc8234eebf51961bfc4977ebbcreed        SkBaseDevice::CreateInfo cinfo(SkImageInfo::MakeN32Premul(w, h),
25d762ca2586707cb808342b11832073e8b3df33adsenorblanco                                       SkBaseDevice::kNever_TileUsage,
2600b7e5eb973a1b1e4d1affa74fc0341e8c41e3dahalcanary                                       kUnknown_SkPixelGeometry,
2700b7e5eb973a1b1e4d1affa74fc0341e8c41e3dahalcanary                                       true /*forImageFilter*/);
2861f501f8c675da8d5915e5e7fd32dfdb113f1cfbreed        SkBaseDevice* dev = fDevice->onCreateDevice(cinfo, NULL);
2961f501f8c675da8d5915e5e7fd32dfdb113f1cfbreed        if (NULL == dev) {
3061f501f8c675da8d5915e5e7fd32dfdb113f1cfbreed            dev = SkBitmapDevice::Create(cinfo.fInfo);
3161f501f8c675da8d5915e5e7fd32dfdb113f1cfbreed        }
3261f501f8c675da8d5915e5e7fd32dfdb113f1cfbreed        return dev;
339c39744a00573b7133fc765b0a9d50a0ceace7b8senorblanco@chromium.org    }
3436352bf5e38f45a70ee4f4fc132a38048d38206dmtklein    bool canHandleImageFilter(const SkImageFilter* filter) override {
359c39744a00573b7133fc765b0a9d50a0ceace7b8senorblanco@chromium.org        return fDevice->canHandleImageFilter(filter);
369c39744a00573b7133fc765b0a9d50a0ceace7b8senorblanco@chromium.org    }
37ae761f7545d8ebf181d220169afac2056b057b8ccommit-bot@chromium.org    virtual bool filterImage(const SkImageFilter* filter, const SkBitmap& src,
384cb543d6057b692e1099e9f115155f0bf323a0c8senorblanco@chromium.org                             const SkImageFilter::Context& ctx,
3936352bf5e38f45a70ee4f4fc132a38048d38206dmtklein                             SkBitmap* result, SkIPoint* offset) override {
404cb543d6057b692e1099e9f115155f0bf323a0c8senorblanco@chromium.org        return fDevice->filterImage(filter, src, ctx, result, offset);
419c39744a00573b7133fc765b0a9d50a0ceace7b8senorblanco@chromium.org    }
429c39744a00573b7133fc765b0a9d50a0ceace7b8senorblanco@chromium.org
4336352bf5e38f45a70ee4f4fc132a38048d38206dmtklein    const SkSurfaceProps* surfaceProps() const override {
442d97bc139a7de5813468bd3dbfd0037351ae5606fmalita        return &fProps;
452d97bc139a7de5813468bd3dbfd0037351ae5606fmalita    }
462d97bc139a7de5813468bd3dbfd0037351ae5606fmalita
479c39744a00573b7133fc765b0a9d50a0ceace7b8senorblanco@chromium.orgprivate:
482d97bc139a7de5813468bd3dbfd0037351ae5606fmalita    SkBaseDevice*  fDevice;
492d97bc139a7de5813468bd3dbfd0037351ae5606fmalita    const SkSurfaceProps fProps;
509c39744a00573b7133fc765b0a9d50a0ceace7b8senorblanco@chromium.org};
519c39744a00573b7133fc765b0a9d50a0ceace7b8senorblanco@chromium.org
529c39744a00573b7133fc765b0a9d50a0ceace7b8senorblanco@chromium.org#endif
53