Flutter Engine
The Flutter Engine
Loading...
Searching...
No Matches
SkSGGradient.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 SkSGGradient_DEFINED
9#define SkSGGradient_DEFINED
10
18
19#include <vector>
20
21class SkShader;
22
23namespace sksg {
24
25/**
26 * Gradient base class.
27 */
28class Gradient : public Shader {
29public:
30 struct ColorStop {
33
34 bool operator==(const ColorStop& other) const {
35 return fPosition == other.fPosition && fColor == other.fColor;
36 }
37 };
38
39 SG_ATTRIBUTE(ColorStops, std::vector<ColorStop>, fColorStops)
40 SG_ATTRIBUTE(TileMode , SkTileMode , fTileMode )
41
42protected:
44
45 virtual sk_sp<SkShader> onMakeShader(const std::vector<SkColor4f>& colors,
46 const std::vector<SkScalar >& positions) const = 0;
47
48protected:
49 Gradient() = default;
50
51private:
52 std::vector<ColorStop> fColorStops;
53 SkTileMode fTileMode = SkTileMode::kClamp;
54
55 using INHERITED = Shader;
56};
57
58class LinearGradient final : public Gradient {
59public:
63
64 SG_ATTRIBUTE(StartPoint, SkPoint, fStartPoint)
65 SG_ATTRIBUTE(EndPoint , SkPoint, fEndPoint )
66
67protected:
68 sk_sp<SkShader> onMakeShader(const std::vector<SkColor4f>&,
69 const std::vector<SkScalar >&) const override;
70
71private:
72 LinearGradient() = default;
73
74 SkPoint fStartPoint = SkPoint::Make(0, 0),
75 fEndPoint = SkPoint::Make(0, 0);
76
77 using INHERITED = Gradient;
78};
79
80class RadialGradient final : public Gradient {
81public:
85
86 SG_ATTRIBUTE(StartCenter, SkPoint , fStartCenter)
87 SG_ATTRIBUTE(EndCenter , SkPoint , fEndCenter )
88 SG_ATTRIBUTE(StartRadius, SkScalar, fStartRadius)
89 SG_ATTRIBUTE(EndRadius , SkScalar, fEndRadius )
90
91protected:
92 sk_sp<SkShader> onMakeShader(const std::vector<SkColor4f>&,
93 const std::vector<SkScalar >&) const override;
94
95private:
96 RadialGradient() = default;
97
98 SkPoint fStartCenter = SkPoint::Make(0, 0),
99 fEndCenter = SkPoint::Make(0, 0);
100 SkScalar fStartRadius = 0,
101 fEndRadius = 0;
102
103 using INHERITED = Gradient;
104};
105
106} // namespace sksg
107
108#endif // SkSGGradient_DEFINED
#define INHERITED(method,...)
#define SG_ATTRIBUTE(attr_name, attr_type, attr_container)
Definition SkSGNode.h:100
SkTileMode
Definition SkTileMode.h:13
virtual sk_sp< SkShader > onMakeShader(const std::vector< SkColor4f > &colors, const std::vector< SkScalar > &positions) const =0
Gradient()=default
sk_sp< SkShader > onRevalidateShader() final
static sk_sp< LinearGradient > Make()
static sk_sp< RadialGradient > Make()
float SkScalar
Definition extension.cpp:12
Definition Skottie.h:32
Definition ref_ptr.h:256
static constexpr SkPoint Make(float x, float y)
bool operator==(const ColorStop &other) const