blob: 602dc4840493307ef3081e70f5516f4e93c2ee60 [file] [log] [blame]
senorblanco@chromium.org86fc2662013-05-31 17:49:12 +00001/*
2 * Copyright 2013 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 SkXfermodeImageFilter_DEFINED
9#define SkXfermodeImageFilter_DEFINED
10
11#include "SkImageFilter.h"
12
13class SkBitmap;
14class SkXfermode;
15
16class SK_API SkXfermodeImageFilter : public SkImageFilter {
17 /**
18 * This filter takes an xfermode, and uses it to composite the foreground
19 * over the background. If foreground or background is NULL, the input
20 * bitmap (src) is used instead.
21 */
22
23public:
commit-bot@chromium.org7b320702013-07-10 21:22:18 +000024 SkXfermodeImageFilter(SkXfermode* mode, SkImageFilter* background,
senorblanco@chromium.orgb295fb62013-10-10 13:51:19 +000025 SkImageFilter* foreground = NULL, const CropRect* cropRect = NULL);
senorblanco@chromium.org86fc2662013-05-31 17:49:12 +000026
27 virtual ~SkXfermodeImageFilter();
28
29 SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkXfermodeImageFilter)
30
31 virtual bool onFilterImage(Proxy* proxy,
32 const SkBitmap& src,
33 const SkMatrix& ctm,
34 SkBitmap* dst,
commit-bot@chromium.orgae761f72014-02-05 22:32:02 +000035 SkIPoint* offset) const SK_OVERRIDE;
senorblanco@chromium.org86fc2662013-05-31 17:49:12 +000036#if SK_SUPPORT_GPU
senorblanco@chromium.orgb295fb62013-10-10 13:51:19 +000037 virtual bool canFilterImageGPU() const SK_OVERRIDE { return !cropRectIsSet(); }
commit-bot@chromium.org1aa54bf2013-08-05 16:53:50 +000038 virtual bool filterImageGPU(Proxy* proxy, const SkBitmap& src, const SkMatrix& ctm,
commit-bot@chromium.orgae761f72014-02-05 22:32:02 +000039 SkBitmap* result, SkIPoint* offset) const SK_OVERRIDE;
senorblanco@chromium.org86fc2662013-05-31 17:49:12 +000040#endif
41
42protected:
commit-bot@chromium.org8b0e8ac2014-01-30 18:58:24 +000043 explicit SkXfermodeImageFilter(SkReadBuffer& buffer);
44 virtual void flatten(SkWriteBuffer&) const SK_OVERRIDE;
senorblanco@chromium.org86fc2662013-05-31 17:49:12 +000045
46private:
47 SkXfermode* fMode;
48 typedef SkImageFilter INHERITED;
49};
50
51#endif