Skia
2DGraphicsLibrary
 All Classes Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
SkColorFilter.h
1 /*
2  * Copyright 2006 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 SkColorFilter_DEFINED
9 #define SkColorFilter_DEFINED
10 
11 #include "SkColor.h"
12 #include "SkFlattenable.h"
13 #include "SkRefCnt.h"
14 #include "SkXfermode.h"
15 
16 class GrContext;
18 class SkBitmap;
19 class SkRasterPipeline;
20 
29 class SK_API SkColorFilter : public SkFlattenable {
30 public:
36  virtual bool asColorMode(SkColor* color, SkXfermode::Mode* mode) const;
37 
43  virtual bool asColorMatrix(SkScalar matrix[20]) const;
44 
61  virtual bool asComponentTable(SkBitmap* table) const;
62 
70  virtual void filterSpan(const SkPMColor src[], int count, SkPMColor result[]) const = 0;
71 
72  virtual void filterSpan4f(const SkPM4f src[], int count, SkPM4f result[]) const;
73 
74  bool appendStages(SkRasterPipeline*) const;
75 
76  enum Flags {
79  kAlphaUnchanged_Flag = 1 << 0,
80  };
81 
84  virtual uint32_t getFlags() const { return 0; }
85 
93  virtual sk_sp<SkColorFilter> makeComposed(sk_sp<SkColorFilter>) const { return nullptr; }
94 
101  SkColor filterColor(SkColor) const;
102 
106  SkColor4f filterColor4f(const SkColor4f&) const;
107 
117  static sk_sp<SkColorFilter> MakeModeFilter(SkColor c, SkXfermode::Mode mode);
118 
126  static sk_sp<SkColorFilter> MakeComposeFilter(sk_sp<SkColorFilter> outer,
127  sk_sp<SkColorFilter> inner);
128 
132  static sk_sp<SkColorFilter> MakeMatrixFilterRowMajor255(const SkScalar array[20]);
133 
134 #ifdef SK_SUPPORT_LEGACY_COLORFILTER_PTR
135  static SkColorFilter* CreateModeFilter(SkColor c, SkXfermode::Mode mode) {
136  return MakeModeFilter(c, mode).release();
137  }
138  static SkColorFilter* CreateComposeFilter(SkColorFilter* outer, SkColorFilter* inner) {
139  return MakeComposeFilter(sk_ref_sp(outer), sk_ref_sp(inner)).release();
140  }
141  static SkColorFilter* CreateMatrixFilterRowMajor255(const SkScalar array[20]) {
142  return MakeMatrixFilterRowMajor255(array).release();
143  }
144  virtual SkColorFilter* newComposed(const SkColorFilter* inner) const {
145  return this->makeComposed(sk_ref_sp(const_cast<SkColorFilter*>(inner))).release();
146  }
147 #endif
148 
149 #if SK_SUPPORT_GPU
150 
159  virtual sk_sp<GrFragmentProcessor> asFragmentProcessor(GrContext*) const;
160 #endif
161 
162  bool affectsTransparentBlack() const {
163  return this->filterColor(0) != 0;
164  }
165 
166  SK_TO_STRING_PUREVIRT()
167 
168  SK_DECLARE_FLATTENABLE_REGISTRAR_GROUP()
169  SK_DEFINE_FLATTENABLE_TYPE(SkColorFilter)
170 
171 protected:
172  SkColorFilter() {}
173 
174  virtual bool onAppendStages(SkRasterPipeline*) const;
175 
176 private:
177  /*
178  * Returns 1 if this is a single filter (not a composition of other filters), otherwise it
179  * reutrns the number of leaf-node filters in a composition. This should be the same value
180  * as the number of GrFragmentProcessors returned by asFragmentProcessors's array parameter.
181  *
182  * e.g. compose(filter, compose(compose(filter, filter), filter)) --> 4
183  */
184  virtual int privateComposedFilterCount() const { return 1; }
185  friend class SkComposeColorFilter;
186 
187  typedef SkFlattenable INHERITED;
188 };
189 
190 #endif
Provides custom fragment shader code.
Definition: GrFragmentProcessor.h:24
Mode
List of predefined xfermodes.
Definition: SkXfermode.h:71
ColorFilters are optional objects in the drawing pipeline.
Definition: SkColorFilter.h:29
Definition: SkColor.h:169
SkFlattenable is the base class for objects that need to be flattened into a data stream for either t...
Definition: SkFlattenable.h:70
virtual uint32_t getFlags() const
Returns the flags for this filter.
Definition: SkColorFilter.h:84
The SkBitmap class specifies a raster bitmap.
Definition: SkBitmap.h:41
Definition: GrContext.h:48
uint32_t SkPMColor
32 bit ARGB color value, premultiplied.
Definition: SkColor.h:147
Flags
Definition: SkColorFilter.h:76
uint32_t SkColor
32 bit ARGB color value, not premultiplied.
Definition: SkColor.h:28
virtual sk_sp< SkColorFilter > makeComposed(sk_sp< SkColorFilter >) const
If this subclass can optimally createa composition with the inner filter, return it as a new filter (...
Definition: SkColorFilter.h:93
Types and macros for colors.