Flutter Engine
The Flutter Engine
Loading...
Searching...
No Matches
SkSGColorFilter.h
Go to the documentation of this file.
1/*
2 * Copyright 2018 Google Inc.
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 SkSGColorFilter_DEFINED
9#define SkSGColorFilter_DEFINED
10
12#include "include/core/SkRect.h"
16
17#include <vector>
18
19class SkCanvas;
20class SkMatrix;
21enum class SkBlendMode;
22struct SkPoint;
23
24namespace sksg {
25
26class Color;
27class InvalidationController;
28class RenderNode;
29
30/**
31 * Base class for nodes which apply a color filter when rendering their descendants.
32 */
33class ColorFilter : public EffectNode {
34protected:
36
37 void onRender(SkCanvas*, const RenderContext*) const final;
38 const RenderNode* onNodeAt(const SkPoint&) const final;
39
41
43
44private:
45 sk_sp<SkColorFilter> fColorFilter;
46
47 using INHERITED = EffectNode;
48};
49
50/**
51 * Wrapper for externally-managed SkColorFilters.
52 *
53 * Allows attaching non-sksg color filters to the render tree.
54 */
55class ExternalColorFilter final : public EffectNode {
56public:
58
60
62
63protected:
64 void onRender(SkCanvas*, const RenderContext*) const override;
65
66private:
68
69 sk_sp<SkColorFilter> fColorFilter;
70
71 using INHERITED = EffectNode;
72};
73
74/**
75 * Concrete SkBlendModeColorFilter Effect node.
76 */
77class ModeColorFilter final : public ColorFilter {
78public:
79 ~ModeColorFilter() override;
80
83 SkBlendMode mode);
84
85protected:
87
88private:
90
91 const sk_sp<Color> fColor;
92 const SkBlendMode fMode;
93
94 using INHERITED = ColorFilter;
95};
96
97/**
98 * Tint/multi-tone color effect: maps RGB colors to the [C0,C1][C1,C2]..[Cn-1,Cn] gradient
99 * based on input luminance (where the colors are evenly distributed across the luminance domain),
100 * then mixes with the input based on weight. Leaves alpha unchanged.
101 */
102class GradientColorFilter final : public ColorFilter {
103public:
104 ~GradientColorFilter() override;
105
109 std::vector<sk_sp<Color>>);
110
111 SG_ATTRIBUTE(Weight, float, fWeight)
112
113protected:
115
116private:
118
119 const std::vector<sk_sp<Color>> fColors;
120
121 float fWeight = 0;
122
123 using INHERITED = ColorFilter;
124};
125
126} // namespace sksg
127
128#endif // SkSGColorFilter_DEFINED
SkColor4f color
SkBlendMode
Definition SkBlendMode.h:38
#define SG_ATTRIBUTE(attr_name, attr_type, attr_container)
Definition SkSGNode.h:100
const RenderNode * onNodeAt(const SkPoint &) const final
virtual sk_sp< SkColorFilter > onRevalidateFilter()=0
SkRect onRevalidate(InvalidationController *, const SkMatrix &) final
void onRender(SkCanvas *, const RenderContext *) const final
void onRender(SkCanvas *, const RenderContext *) const override
static sk_sp< ExternalColorFilter > Make(sk_sp< RenderNode > child)
sk_sp< SkColorFilter > onRevalidateFilter() override
static sk_sp< GradientColorFilter > Make(sk_sp< RenderNode > child, sk_sp< Color > c0, sk_sp< Color > c1)
sk_sp< SkColorFilter > onRevalidateFilter() override
static sk_sp< ModeColorFilter > Make(sk_sp< RenderNode > child, sk_sp< Color > color, SkBlendMode mode)
Definition Skottie.h:32