Flutter Engine
The Flutter Engine
Loading...
Searching...
No Matches
Public Member Functions | Static Public Member Functions | Friends | List of all members
SkColorFilter Class Reference

#include <SkColorFilter.h>

Inheritance diagram for SkColorFilter:
SkFlattenable SkRefCnt SkRefCntBase SkColorFilterBase SkColorMatrixFilter FailureColorFilter SkBlendModeColorFilter SkColorSpaceXformColorFilter SkComposeColorFilter SkGaussianColorFilter SkMatrixColorFilter SkRuntimeColorFilter SkTableColorFilter SkWorkingFormatColorFilter

Public Member Functions

bool asAColorMode (SkColor *color, SkBlendMode *mode) const
 
bool asAColorMatrix (float matrix[20]) const
 
bool isAlphaUnchanged () const
 
SkColor filterColor (SkColor) const
 
SkColor4f filterColor4f (const SkColor4f &srcColor, SkColorSpace *srcCS, SkColorSpace *dstCS) const
 
sk_sp< SkColorFiltermakeComposed (sk_sp< SkColorFilter > inner) const
 
sk_sp< SkColorFiltermakeWithWorkingColorSpace (sk_sp< SkColorSpace >) const
 
- Public Member Functions inherited from SkFlattenable
 SkFlattenable ()
 
virtual Factory getFactory () const =0
 
virtual const char * getTypeName () const =0
 
virtual void flatten (SkWriteBuffer &) const
 
virtual Type getFlattenableType () const =0
 
sk_sp< SkDataserialize (const SkSerialProcs *=nullptr) const
 
size_t serialize (void *memory, size_t memory_size, const SkSerialProcs *=nullptr) const
 
- Public Member Functions inherited from SkRefCntBase
 SkRefCntBase ()
 
virtual ~SkRefCntBase ()
 
bool unique () const
 
void ref () const
 
void unref () const
 

Static Public Member Functions

static sk_sp< SkColorFilterDeserialize (const void *data, size_t size, const SkDeserialProcs *procs=nullptr)
 
- Static Public Member Functions inherited from SkFlattenable
static Factory NameToFactory (const char name[])
 
static const char * FactoryToName (Factory)
 
static void Register (const char name[], Factory)
 
static sk_sp< SkFlattenableDeserialize (Type, const void *data, size_t length, const SkDeserialProcs *procs=nullptr)
 

Friends

class SkColorFilterBase
 

Additional Inherited Members

- Public Types inherited from SkFlattenable
enum  Type {
  kSkColorFilter_Type , kSkBlender_Type , kSkDrawable_Type , kSkDrawLooper_Type ,
  kSkImageFilter_Type , kSkMaskFilter_Type , kSkPathEffect_Type , kSkShader_Type
}
 
typedef sk_sp< SkFlattenable >(* Factory) (SkReadBuffer &)
 

Detailed Description

ColorFilters are optional objects in the drawing pipeline. When present in a paint, they are called with the "src" colors, and return new colors, which are then passed onto the next stage (either ImageFilter or Xfermode).

All subclasses are required to be reentrant-safe : it must be legal to share the same instance between several threads.

Definition at line 35 of file SkColorFilter.h.

Member Function Documentation

◆ asAColorMatrix()

bool SkColorFilter::asAColorMatrix ( float  matrix[20]) const

If the filter can be represented by a 5x4 matrix, this returns true, and sets the matrix appropriately. If not, this returns false and ignores the parameter.

Definition at line 30 of file SkColorFilter.cpp.

30 {
31 return as_CFB(this)->onAsAColorMatrix(matrix);
32}
static SkColorFilterBase * as_CFB(SkColorFilter *filter)
virtual bool onAsAColorMatrix(float[20]) const

◆ asAColorMode()

bool SkColorFilter::asAColorMode ( SkColor color,
SkBlendMode mode 
) const

If the filter can be represented by a source color plus Mode, this returns true, and sets (if not NULL) the color and mode appropriately. If not, this returns false and ignores the parameters.

Definition at line 26 of file SkColorFilter.cpp.

26 {
27 return as_CFB(this)->onAsAColorMode(color, mode);
28}
SkColor4f color
virtual bool onAsAColorMode(SkColor *color, SkBlendMode *bmode) const

◆ Deserialize()

sk_sp< SkColorFilter > SkColorFilter::Deserialize ( const void *  data,
size_t  size,
const SkDeserialProcs procs = nullptr 
)
static

Definition at line 38 of file SkColorFilter.cpp.

39 {
40 return sk_sp<SkColorFilter>(static_cast<SkColorFilter*>(
42 kSkColorFilter_Type, data, size, procs).release()));
43}
static sk_sp< SkFlattenable > Deserialize(Type, const void *data, size_t length, const SkDeserialProcs *procs=nullptr)

◆ filterColor()

SkColor SkColorFilter::filterColor ( SkColor  c) const

Applies this filter to the input color. This function does no color management.

DEPRECATED: Please use filterColor4f instead. That function supports higher precision, wide-gamut color, and is explicit about the color space of the input and output.

Definition at line 45 of file SkColorFilter.cpp.

45 {
46 // This is mostly meaningless. We should phase-out this call entirely.
47 SkColorSpace* cs = nullptr;
48 return this->filterColor4f(SkColor4f::FromColor(c), cs, cs).toSkColor();
49}
SkColor4f filterColor4f(const SkColor4f &srcColor, SkColorSpace *srcCS, SkColorSpace *dstCS) const
static SkRGBA4f FromColor(SkColor color)

◆ filterColor4f()

SkColor4f SkColorFilter::filterColor4f ( const SkColor4f srcColor,
SkColorSpace srcCS,
SkColorSpace dstCS 
) const

Converts the src color (in src colorspace), into the dst colorspace, then applies this filter to it, returning the filtered color in the dst colorspace.

Definition at line 51 of file SkColorFilter.cpp.

52 {
53 SkPMColor4f color = { origSrcColor.fR, origSrcColor.fG, origSrcColor.fB, origSrcColor.fA };
55 dstCS, kPremul_SkAlphaType).apply(color.vec());
56
57 SkPMColor4f filteredColor = as_CFB(this)->onFilterColor4f(color, dstCS);
58 // SkColor4f will assert if we allow alpha outside [0,1]. (SkSL color filters might do this).
59 filteredColor.fA = SkTPin(filteredColor.fA, 0.0f, 1.0f);
60 return filteredColor.unpremul();
61}
kUnpremul_SkAlphaType
@ kPremul_SkAlphaType
pixel components are premultiplied by alpha
Definition SkAlphaType.h:29
static constexpr const T & SkTPin(const T &x, const T &lo, const T &hi)
Definition SkTPin.h:19
virtual SkPMColor4f onFilterColor4f(const SkPMColor4f &color, SkColorSpace *dstCS) const
void apply(float rgba[4]) const
SkRGBA4f< kUnpremul_SkAlphaType > unpremul() const
Definition SkColor.h:395
float fA
alpha component
Definition SkColor.h:266

◆ isAlphaUnchanged()

bool SkColorFilter::isAlphaUnchanged ( ) const

Definition at line 34 of file SkColorFilter.cpp.

34 {
35 return as_CFB(this)->onIsAlphaUnchanged();
36}
virtual bool onIsAlphaUnchanged() const

◆ makeComposed()

sk_sp< SkColorFilter > SkColorFilter::makeComposed ( sk_sp< SkColorFilter inner) const

Construct a colorfilter whose effect is to first apply the inner filter and then apply this filter, applied to the output of the inner filter.

result = this(inner(...))

Definition at line 48 of file SkComposeColorFilter.cpp.

48 {
49 if (!inner) {
50 return sk_ref_sp(this);
51 }
52
53 return sk_sp<SkColorFilter>(new SkComposeColorFilter(sk_ref_sp(this), std::move(inner)));
54}
sk_sp< T > sk_ref_sp(T *obj)
Definition SkRefCnt.h:381

◆ makeWithWorkingColorSpace()

sk_sp< SkColorFilter > SkColorFilter::makeWithWorkingColorSpace ( sk_sp< SkColorSpace workingSpace) const

Return a colorfilter that will compute this filter in a specific color space. By default all filters operate in the destination (surface) color space. This allows filters like Blend and Matrix, or runtime color filters to perform their math in a known space.

Definition at line 63 of file SkColorFilter.cpp.

64 {
65 SkColorFilter* base = const_cast<SkColorFilter*>(this);
66 if (!workingSpace) {
67 return sk_ref_sp(base);
68 }
69
71 skcms_Matrix3x3 toXYZ;
72 workingSpace->transferFn(&tf);
73 workingSpace->toXYZD50(&toXYZ);
74 const SkAlphaType* kOriginalAlphaType = nullptr;
75 return SkColorFilterPriv::WithWorkingFormat(sk_ref_sp(base), &tf, &toXYZ, kOriginalAlphaType);
76}
SkAlphaType
Definition SkAlphaType.h:26
static sk_sp< SkColorFilter > WithWorkingFormat(sk_sp< SkColorFilter > child, const skcms_TransferFunction *tf, const skcms_Matrix3x3 *gamut, const SkAlphaType *at)
bool toXYZD50(skcms_Matrix3x3 *toXYZD50) const
void transferFn(float gabcdef[7]) const

Friends And Related Symbol Documentation

◆ SkColorFilterBase

friend class SkColorFilterBase
friend

Definition at line 85 of file SkColorFilter.h.


The documentation for this class was generated from the following files: