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