|  | /* | 
|  | * Copyright 2013 The Android Open Source Project | 
|  | * | 
|  | * Use of this source code is governed by a BSD-style license that can be | 
|  | * found in the LICENSE file. | 
|  | */ | 
|  |  | 
|  | #ifndef SkXfermodeImageFilter_DEFINED | 
|  | #define SkXfermodeImageFilter_DEFINED | 
|  |  | 
|  | #include "SkImageFilter.h" | 
|  |  | 
|  | class SkBitmap; | 
|  | class SkXfermode; | 
|  |  | 
|  | class SK_API SkXfermodeImageFilter : public SkImageFilter { | 
|  | /** | 
|  | * This filter takes an xfermode, and uses it to composite the foreground | 
|  | * over the background.  If foreground or background is NULL, the input | 
|  | * bitmap (src) is used instead. | 
|  | */ | 
|  |  | 
|  | public: | 
|  | static SkImageFilter* Create(SkXfermode* mode, SkImageFilter* background, | 
|  | SkImageFilter* foreground = NULL, | 
|  | const CropRect* cropRect = NULL) { | 
|  | SkImageFilter* inputs[2] = { background, foreground }; | 
|  | return new SkXfermodeImageFilter(mode, inputs, cropRect); | 
|  | } | 
|  |  | 
|  | SK_TO_STRING_OVERRIDE() | 
|  | SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkXfermodeImageFilter) | 
|  |  | 
|  | bool onFilterImageDeprecated(Proxy* proxy, | 
|  | const SkBitmap& src, | 
|  | const Context& ctx, | 
|  | SkBitmap* dst, | 
|  | SkIPoint* offset) const override; | 
|  | #if SK_SUPPORT_GPU | 
|  | bool canFilterImageGPU() const override; | 
|  | bool filterImageGPUDeprecated(Proxy* proxy, const SkBitmap& src, const Context& ctx, | 
|  | SkBitmap* result, SkIPoint* offset) const override; | 
|  | #endif | 
|  |  | 
|  | protected: | 
|  | SkXfermodeImageFilter(SkXfermode* mode, SkImageFilter* inputs[2], | 
|  | const CropRect* cropRect); | 
|  | void flatten(SkWriteBuffer&) const override; | 
|  |  | 
|  | private: | 
|  | SkAutoTUnref<SkXfermode> fMode; | 
|  | typedef SkImageFilter INHERITED; | 
|  | }; | 
|  |  | 
|  | #endif |