186fc266eda887920e3dd104bee8121ae19729cf5senorblanco@chromium.org/* 286fc266eda887920e3dd104bee8121ae19729cf5senorblanco@chromium.org * Copyright 2013 The Android Open Source Project 386fc266eda887920e3dd104bee8121ae19729cf5senorblanco@chromium.org * 486fc266eda887920e3dd104bee8121ae19729cf5senorblanco@chromium.org * Use of this source code is governed by a BSD-style license that can be 586fc266eda887920e3dd104bee8121ae19729cf5senorblanco@chromium.org * found in the LICENSE file. 686fc266eda887920e3dd104bee8121ae19729cf5senorblanco@chromium.org */ 786fc266eda887920e3dd104bee8121ae19729cf5senorblanco@chromium.org 886fc266eda887920e3dd104bee8121ae19729cf5senorblanco@chromium.org#ifndef SkXfermodeImageFilter_DEFINED 986fc266eda887920e3dd104bee8121ae19729cf5senorblanco@chromium.org#define SkXfermodeImageFilter_DEFINED 1086fc266eda887920e3dd104bee8121ae19729cf5senorblanco@chromium.org 1186fc266eda887920e3dd104bee8121ae19729cf5senorblanco@chromium.org#include "SkImageFilter.h" 1286fc266eda887920e3dd104bee8121ae19729cf5senorblanco@chromium.org 1386fc266eda887920e3dd104bee8121ae19729cf5senorblanco@chromium.orgclass SkBitmap; 1486fc266eda887920e3dd104bee8121ae19729cf5senorblanco@chromium.orgclass SkXfermode; 1586fc266eda887920e3dd104bee8121ae19729cf5senorblanco@chromium.org 1686fc266eda887920e3dd104bee8121ae19729cf5senorblanco@chromium.orgclass SK_API SkXfermodeImageFilter : public SkImageFilter { 1786fc266eda887920e3dd104bee8121ae19729cf5senorblanco@chromium.org /** 1886fc266eda887920e3dd104bee8121ae19729cf5senorblanco@chromium.org * This filter takes an xfermode, and uses it to composite the foreground 1986fc266eda887920e3dd104bee8121ae19729cf5senorblanco@chromium.org * over the background. If foreground or background is NULL, the input 2086fc266eda887920e3dd104bee8121ae19729cf5senorblanco@chromium.org * bitmap (src) is used instead. 2186fc266eda887920e3dd104bee8121ae19729cf5senorblanco@chromium.org */ 2286fc266eda887920e3dd104bee8121ae19729cf5senorblanco@chromium.org 2386fc266eda887920e3dd104bee8121ae19729cf5senorblanco@chromium.orgpublic: 2486fc266eda887920e3dd104bee8121ae19729cf5senorblanco@chromium.org virtual ~SkXfermodeImageFilter(); 2586fc266eda887920e3dd104bee8121ae19729cf5senorblanco@chromium.org 26cac5fd597f6e2495f50aaa6bcbe3dadc56f0b977commit-bot@chromium.org static SkXfermodeImageFilter* Create(SkXfermode* mode, SkImageFilter* background, 27cac5fd597f6e2495f50aaa6bcbe3dadc56f0b977commit-bot@chromium.org SkImageFilter* foreground = NULL, 28cac5fd597f6e2495f50aaa6bcbe3dadc56f0b977commit-bot@chromium.org const CropRect* cropRect = NULL) { 29cac5fd597f6e2495f50aaa6bcbe3dadc56f0b977commit-bot@chromium.org return SkNEW_ARGS(SkXfermodeImageFilter, (mode, background, foreground, cropRect)); 30cac5fd597f6e2495f50aaa6bcbe3dadc56f0b977commit-bot@chromium.org } 31cac5fd597f6e2495f50aaa6bcbe3dadc56f0b977commit-bot@chromium.org 3286fc266eda887920e3dd104bee8121ae19729cf5senorblanco@chromium.org SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkXfermodeImageFilter) 3386fc266eda887920e3dd104bee8121ae19729cf5senorblanco@chromium.org 3486fc266eda887920e3dd104bee8121ae19729cf5senorblanco@chromium.org virtual bool onFilterImage(Proxy* proxy, 3586fc266eda887920e3dd104bee8121ae19729cf5senorblanco@chromium.org const SkBitmap& src, 364cb543d6057b692e1099e9f115155f0bf323a0c8senorblanco@chromium.org const Context& ctx, 3786fc266eda887920e3dd104bee8121ae19729cf5senorblanco@chromium.org SkBitmap* dst, 38ae761f7545d8ebf181d220169afac2056b057b8ccommit-bot@chromium.org SkIPoint* offset) const SK_OVERRIDE; 3986fc266eda887920e3dd104bee8121ae19729cf5senorblanco@chromium.org#if SK_SUPPORT_GPU 40ee845ae4940779280a853269d7d797dc9eb89201senorblanco@chromium.org virtual bool canFilterImageGPU() const SK_OVERRIDE; 414cb543d6057b692e1099e9f115155f0bf323a0c8senorblanco@chromium.org virtual bool filterImageGPU(Proxy* proxy, const SkBitmap& src, const Context& ctx, 42ae761f7545d8ebf181d220169afac2056b057b8ccommit-bot@chromium.org SkBitmap* result, SkIPoint* offset) const SK_OVERRIDE; 4386fc266eda887920e3dd104bee8121ae19729cf5senorblanco@chromium.org#endif 4486fc266eda887920e3dd104bee8121ae19729cf5senorblanco@chromium.org 4586fc266eda887920e3dd104bee8121ae19729cf5senorblanco@chromium.orgprotected: 46bd0be25074e53a6d1abc284562568c9745191984commit-bot@chromium.org SkXfermodeImageFilter(SkXfermode* mode, SkImageFilter* background, 47bd0be25074e53a6d1abc284562568c9745191984commit-bot@chromium.org SkImageFilter* foreground, const CropRect* cropRect); 488b0e8ac5f582de80356019406e2975079bf0829dcommit-bot@chromium.org explicit SkXfermodeImageFilter(SkReadBuffer& buffer); 498b0e8ac5f582de80356019406e2975079bf0829dcommit-bot@chromium.org virtual void flatten(SkWriteBuffer&) const SK_OVERRIDE; 5086fc266eda887920e3dd104bee8121ae19729cf5senorblanco@chromium.org 5186fc266eda887920e3dd104bee8121ae19729cf5senorblanco@chromium.orgprivate: 5286fc266eda887920e3dd104bee8121ae19729cf5senorblanco@chromium.org SkXfermode* fMode; 5386fc266eda887920e3dd104bee8121ae19729cf5senorblanco@chromium.org typedef SkImageFilter INHERITED; 5486fc266eda887920e3dd104bee8121ae19729cf5senorblanco@chromium.org}; 5586fc266eda887920e3dd104bee8121ae19729cf5senorblanco@chromium.org 5686fc266eda887920e3dd104bee8121ae19729cf5senorblanco@chromium.org#endif 57