Flutter Engine
The Flutter Engine
Loading...
Searching...
No Matches
SkColorFilterBase.h
Go to the documentation of this file.
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 SkColorFilterBase_DEFINED
9#define SkColorFilterBase_DEFINED
10
16
17#include <cstddef>
18
19class SkColorSpace;
20class SkRuntimeEffect;
21enum class SkBlendMode;
22struct SkDeserialProcs;
23struct SkStageRec;
24
25#define SK_ALL_COLOR_FILTERS(M) \
26 M(BlendMode) \
27 M(ColorSpaceXform) \
28 M(Compose) \
29 M(Gaussian) \
30 M(Matrix) \
31 M(Runtime) \
32 M(Table) \
33 M(WorkingFormat)
34
36public:
37 [[nodiscard]] virtual bool appendStages(const SkStageRec& rec, bool shaderIsOpaque) const = 0;
38
39 /** Returns the flags for this filter. Override in subclasses to return custom flags.
40 */
41 virtual bool onIsAlphaUnchanged() const { return false; }
42
43 enum class Type {
44 // Used for stubs/tests
45 kNoop,
46#define M(type) k##type,
48#undef M
49
50 };
51
52 virtual Type type() const = 0;
53
55 return this->filterColor4f(SkColors::kTransparent, nullptr, nullptr) !=
57 }
58
59 virtual SkRuntimeEffect* asRuntimeEffect() const { return nullptr; }
60
64
68
69 static sk_sp<SkColorFilter> Deserialize(const void* data, size_t size,
70 const SkDeserialProcs* procs = nullptr) {
71 return sk_sp<SkColorFilter>(static_cast<SkColorFilter*>(
73 kSkColorFilter_Type, data, size, procs).release()));
74 }
75
76 virtual SkPMColor4f onFilterColor4f(const SkPMColor4f& color, SkColorSpace* dstCS) const;
77
78protected:
80
81 virtual bool onAsAColorMatrix(float[20]) const;
82 virtual bool onAsAColorMode(SkColor* color, SkBlendMode* bmode) const;
83
84private:
85 friend class SkColorFilter;
86
88};
89
90static inline SkColorFilterBase* as_CFB(SkColorFilter* filter) {
91 return static_cast<SkColorFilterBase*>(filter);
92}
93
94static inline const SkColorFilterBase* as_CFB(const SkColorFilter* filter) {
95 return static_cast<const SkColorFilterBase*>(filter);
96}
97
98static inline const SkColorFilterBase* as_CFB(const sk_sp<SkColorFilter>& filter) {
99 return static_cast<SkColorFilterBase*>(filter.get());
100}
101
103 return sk_sp<SkColorFilterBase>(static_cast<SkColorFilterBase*>(filter.release()));
104}
105
112
113#endif
SkColor4f color
SkBlendMode
Definition SkBlendMode.h:38
void SkRegisterMatrixColorFilterFlattenable()
void SkRegisterComposeColorFilterFlattenable()
void SkRegisterWorkingFormatColorFilterFlattenable()
void SkRegisterTableColorFilterFlattenable()
static sk_sp< SkColorFilterBase > as_CFB_sp(sk_sp< SkColorFilter > filter)
void SkRegisterSkColorSpaceXformColorFilterFlattenable()
#define SK_ALL_COLOR_FILTERS(M)
static SkColorFilterBase * as_CFB(SkColorFilter *filter)
void SkRegisterModeColorFilterFlattenable()
uint32_t SkColor
Definition SkColor.h:37
virtual bool onAsAColorMatrix(float[20]) const
static SkFlattenable::Type GetFlattenableType()
bool affectsTransparentBlack() const
virtual Type type() const =0
virtual SkRuntimeEffect * asRuntimeEffect() const
static sk_sp< SkColorFilter > Deserialize(const void *data, size_t size, const SkDeserialProcs *procs=nullptr)
virtual SkPMColor4f onFilterColor4f(const SkPMColor4f &color, SkColorSpace *dstCS) const
virtual bool appendStages(const SkStageRec &rec, bool shaderIsOpaque) const =0
virtual bool onIsAlphaUnchanged() const
virtual bool onAsAColorMode(SkColor *color, SkBlendMode *bmode) const
SkFlattenable::Type getFlattenableType() const override
SkColor4f filterColor4f(const SkColor4f &srcColor, SkColorSpace *srcCS, SkColorSpace *dstCS) const
static sk_sp< SkFlattenable > Deserialize(Type, const void *data, size_t length, const SkDeserialProcs *procs=nullptr)
T * get() const
Definition SkRefCnt.h:303
T * release()
Definition SkRefCnt.h:324
constexpr SkColor4f kTransparent
Definition SkColor.h:434