Skia
2DGraphicsLibrary
 All Classes Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
SkXfermodeImageFilter.h
1 /*
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 
13 class SkBitmap;
14 class SkXfermode;
15 
16 class SK_API SkXfermodeImageFilter : public SkImageFilter {
23 public:
24  static sk_sp<SkImageFilter> Make(sk_sp<SkXfermode> mode, sk_sp<SkImageFilter> background,
25  sk_sp<SkImageFilter> foreground, const CropRect* cropRect);
26  static sk_sp<SkImageFilter> Make(sk_sp<SkXfermode> mode, sk_sp<SkImageFilter> background) {
27  return Make(std::move(mode), std::move(background), nullptr, nullptr);
28  }
29 
30 #ifdef SK_SUPPORT_LEGACY_XFERMODE_PTR
31  static SkImageFilter* Create(SkXfermode* mode, SkImageFilter* background,
32  SkImageFilter* foreground = NULL,
33  const CropRect* cropRect = NULL) {
34  return Make(sk_ref_sp(mode),
35  sk_ref_sp(background),
36  sk_ref_sp(foreground),
37  cropRect).release();
38  }
39 #endif
40 #ifdef SK_SUPPORT_LEGACY_IMAGEFILTER_PTR
41  static sk_sp<SkImageFilter> Make(sk_sp<SkXfermode> mode, SkImageFilter* background,
42  SkImageFilter* foreground, const CropRect* cropRect) {
43  return Make(std::move(mode),
44  sk_ref_sp(background),
45  sk_ref_sp(foreground),
46  cropRect);
47  }
48  static sk_sp<SkImageFilter> Make(sk_sp<SkXfermode> mode, SkImageFilter* background) {
49  return Make(std::move(mode), sk_ref_sp(background));
50  }
51 #endif
52 
53  SK_TO_STRING_OVERRIDE()
54  SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkXfermodeImageFilter)
55 
56 protected:
57  sk_sp<SkSpecialImage> onFilterImage(SkSpecialImage* source, const Context&,
58  SkIPoint* offset) const override;
59 
60 #if SK_SUPPORT_GPU
61  sk_sp<SkSpecialImage> filterImageGPU(SkSpecialImage* source,
62  sk_sp<SkSpecialImage> background,
63  const SkIPoint& backgroundOffset,
64  sk_sp<SkSpecialImage> foreground,
65  const SkIPoint& foregroundOffset,
66  const SkIRect& bounds) const;
67 #endif
68 
70  const CropRect* cropRect);
71  void flatten(SkWriteBuffer&) const override;
72 
73 private:
74  sk_sp<SkXfermode> fMode;
75  typedef SkImageFilter INHERITED;
76 };
77 
78 #endif
T *SK_WARN_UNUSED_RESULT release()
Return the bare pointer, and set the internal object pointer to nullptr.
Definition: SkRefCnt.h:363
Definition: SkImageFilter.h:55
void flatten(SkWriteBuffer &) const override
Override this if your subclass needs to record data that it will need to recreate itself from its Cre...
virtual sk_sp< SkSpecialImage > onFilterImage(SkSpecialImage *src, const Context &, SkIPoint *offset) const =0
This is the virtual which should be overridden by the derived class to perform image filtering...
Definition: SkRefCnt.h:135
SkXfermode is the base class for objects that are called to implement custom "transfer-modes" in the ...
Definition: SkXfermode.h:34
The SkBitmap class specifies a raster bitmap.
Definition: SkBitmap.h:41
Base class for image filters.
Definition: SkImageFilter.h:35
Definition: SkWriteBuffer.h:26
Definition: SkXfermodeImageFilter.h:16
Definition: SkImageFilter.h:37
SkIRect holds four 32 bit integer coordinates for a rectangle.
Definition: SkRect.h:20
SkIPoint holds two 32 bit integer coordinates.
Definition: SkPoint.h:40