Skia
2DGraphicsLibrary
 All Classes Namespaces 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 "SkBlendMode.h"
12 #include "SkColor.h"
13 #include "SkFlattenable.h"
14 #include "SkRefCnt.h"
15 
16 class GrContext;
17 class GrFragmentProcessor;
18 class SkArenaAlloc;
19 class SkBitmap;
20 class SkColorSpace;
21 class SkColorSpaceXformer;
22 class SkRasterPipeline;
23 
32 class SK_API SkColorFilter : public SkFlattenable {
33 public:
39  virtual bool asColorMode(SkColor* color, SkBlendMode* bmode) const;
40 
46  virtual bool asColorMatrix(SkScalar matrix[20]) const;
47 
64  virtual bool asComponentTable(SkBitmap* table) const;
65 
73  virtual void filterSpan(const SkPMColor src[], int count, SkPMColor result[]) const = 0;
74 
75  void appendStages(SkRasterPipeline*, SkColorSpace*, SkArenaAlloc*, bool shaderIsOpaque) const;
76 
77  enum Flags {
80  kAlphaUnchanged_Flag = 1 << 0,
81  };
82 
85  virtual uint32_t getFlags() const { return 0; }
86 
94  virtual sk_sp<SkColorFilter> makeComposed(sk_sp<SkColorFilter>) const { return nullptr; }
95 
102  SkColor filterColor(SkColor) const;
103 
107  SkColor4f filterColor4f(const SkColor4f&) const;
108 
118  static sk_sp<SkColorFilter> MakeModeFilter(SkColor c, SkBlendMode mode);
119 
127  static sk_sp<SkColorFilter> MakeComposeFilter(sk_sp<SkColorFilter> outer,
128  sk_sp<SkColorFilter> inner);
129 
133  static sk_sp<SkColorFilter> MakeMatrixFilterRowMajor255(const SkScalar array[20]);
134 
135 #if SK_SUPPORT_GPU
136 
145  virtual sk_sp<GrFragmentProcessor> asFragmentProcessor(GrContext*,
146  SkColorSpace* dstColorSpace) const;
147 #endif
148 
149  bool affectsTransparentBlack() const {
150  return this->filterColor(0) != 0;
151  }
152 
153  SK_TO_STRING_PUREVIRT()
154 
155  SK_DECLARE_FLATTENABLE_REGISTRAR_GROUP()
156  SK_DEFINE_FLATTENABLE_TYPE(SkColorFilter)
157 
158 protected:
159  SkColorFilter() {}
160 
161  sk_sp<SkColorFilter> makeColorSpace(SkColorSpaceXformer* xformer) const {
162  return this->onMakeColorSpace(xformer);
163  }
164  virtual sk_sp<SkColorFilter> onMakeColorSpace(SkColorSpaceXformer*) const {
165  return sk_ref_sp(const_cast<SkColorFilter*>(this));
166  }
167 
168 private:
169  /*
170  * Returns 1 if this is a single filter (not a composition of other filters), otherwise it
171  * reutrns the number of leaf-node filters in a composition. This should be the same value
172  * as the number of GrFragmentProcessors returned by asFragmentProcessors's array parameter.
173  *
174  * e.g. compose(filter, compose(compose(filter, filter), filter)) --> 4
175  */
176  virtual int privateComposedFilterCount() const { return 1; }
177 
178  virtual void onAppendStages(SkRasterPipeline*, SkColorSpace*, SkArenaAlloc*,
179  bool shaderIsOpaque) const = 0;
180 
181  friend class SkColorSpaceXformer;
182  friend class SkComposeColorFilter;
183 
184  typedef SkFlattenable INHERITED;
185 };
186 
187 #endif
Definition: SkColorSpace.h:59
ColorFilters are optional objects in the drawing pipeline.
Definition: SkColorFilter.h:32
Definition: SkColor.h:179
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:85
The SkBitmap class specifies a raster bitmap.
Definition: SkBitmap.h:37
Definition: GrContext.h:47
uint32_t SkPMColor
32 bit ARGB color value, premultiplied.
Definition: SkColor.h:161
Flags
Definition: SkColorFilter.h:77
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:94
Types and macros for colors.