Flutter Engine
The Flutter Engine
Loading...
Searching...
No Matches
dl_paint.h
Go to the documentation of this file.
1// Copyright 2013 The Flutter Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef FLUTTER_DISPLAY_LIST_DL_PAINT_H_
6#define FLUTTER_DISPLAY_LIST_DL_PAINT_H_
7
8#include <memory>
9#include <utility>
10#include "flutter/display_list/dl_blend_mode.h"
11#include "flutter/display_list/dl_color.h"
12#include "flutter/display_list/effects/dl_color_filter.h"
13#include "flutter/display_list/effects/dl_color_source.h"
14#include "flutter/display_list/effects/dl_image_filter.h"
15#include "flutter/display_list/effects/dl_mask_filter.h"
16#include "flutter/display_list/effects/dl_path_effect.h"
17
18namespace flutter {
19
20enum class DlDrawStyle {
21 kFill, //!< fills interior of shapes
22 kStroke, //!< strokes boundary of shapes
23 kStrokeAndFill, //!< both strokes and fills shapes
24
27};
28
29enum class DlStrokeCap {
30 kButt, //!< no stroke extension
31 kRound, //!< adds circle
32 kSquare, //!< adds square
33
36};
37
38enum class DlStrokeJoin {
39 kMiter, //!< extends to miter limit
40 kRound, //!< adds circle
41 kBevel, //!< connects outside edges
42
45};
46
47class DlPaint {
48 public:
50 static constexpr float kDefaultWidth = 0.0;
51 static constexpr float kDefaultMiter = 4.0;
52
53 static const DlPaint kDefault;
54
55 DlPaint() : DlPaint(DlColor::kBlack()) {}
56 explicit DlPaint(DlColor color);
57
58 bool isAntiAlias() const { return is_anti_alias_; }
61 return *this;
62 }
63
64 bool isInvertColors() const { return is_invert_colors_; }
69
70 DlColor getColor() const { return color_; }
72 color_ = color;
73 return *this;
74 }
75
76 uint8_t getAlpha() const { return color_.argb() >> 24; }
77 DlPaint& setAlpha(uint8_t alpha) { return setColor(color_.withAlpha(alpha)); }
78 SkScalar getOpacity() const { return color_.getAlphaF(); }
80 setAlpha(SkScalarRoundToInt(opacity * 0xff));
81 return *this;
82 }
83
85 return static_cast<DlBlendMode>(blend_mode_);
86 }
88 blend_mode_ = static_cast<unsigned>(mode);
89 return *this;
90 }
91
93 return static_cast<DlDrawStyle>(draw_style_);
94 }
96 draw_style_ = static_cast<unsigned>(style);
97 return *this;
98 }
99
101 return static_cast<DlStrokeCap>(stroke_cap_);
102 }
104 stroke_cap_ = static_cast<unsigned>(cap);
105 return *this;
106 }
107
109 return static_cast<DlStrokeJoin>(stroke_join_);
110 }
112 stroke_join_ = static_cast<unsigned>(join);
113 return *this;
114 }
115
116 float getStrokeWidth() const { return stroke_width_; }
118 stroke_width_ = width;
119 return *this;
120 }
121
122 float getStrokeMiter() const { return stroke_miter_; }
123 DlPaint& setStrokeMiter(float miter) {
124 stroke_miter_ = miter;
125 return *this;
126 }
127
128 std::shared_ptr<const DlColorSource> getColorSource() const {
129 return color_source_;
130 }
131 const DlColorSource* getColorSourcePtr() const { return color_source_.get(); }
132 DlPaint& setColorSource(std::shared_ptr<const DlColorSource> source) {
133 color_source_ = std::move(source);
134 return *this;
135 }
137 color_source_ = source ? source->shared() : nullptr;
138 return *this;
139 }
140
141 std::shared_ptr<const DlColorFilter> getColorFilter() const {
142 return color_filter_;
143 }
144 const DlColorFilter* getColorFilterPtr() const { return color_filter_.get(); }
145 DlPaint& setColorFilter(const std::shared_ptr<const DlColorFilter>& filter) {
146 color_filter_ = filter;
147 return *this;
148 }
150 color_filter_ = filter ? filter->shared() : nullptr;
151 return *this;
152 }
153
154 std::shared_ptr<const DlImageFilter> getImageFilter() const {
155 return image_filter_;
156 }
157 const DlImageFilter* getImageFilterPtr() const { return image_filter_.get(); }
158 DlPaint& setImageFilter(const std::shared_ptr<const DlImageFilter>& filter) {
159 image_filter_ = filter;
160 return *this;
161 }
163 image_filter_ = filter ? filter->shared() : nullptr;
164 return *this;
165 }
166
167 std::shared_ptr<const DlMaskFilter> getMaskFilter() const {
168 return mask_filter_;
169 }
170 const DlMaskFilter* getMaskFilterPtr() const { return mask_filter_.get(); }
171 DlPaint& setMaskFilter(const std::shared_ptr<DlMaskFilter>& filter) {
172 mask_filter_ = filter;
173 return *this;
174 }
176 mask_filter_ = filter ? filter->shared() : nullptr;
177 return *this;
178 }
179
180 std::shared_ptr<const DlPathEffect> getPathEffect() const {
181 return path_effect_;
182 }
183 const DlPathEffect* getPathEffectPtr() const { return path_effect_.get(); }
184 DlPaint& setPathEffect(const std::shared_ptr<DlPathEffect>& pathEffect) {
185 path_effect_ = pathEffect;
186 return *this;
187 }
189 path_effect_ = effect ? effect->shared() : nullptr;
190 return *this;
191 }
192
193 bool isDefault() const { return *this == kDefault; }
194
195 bool operator==(DlPaint const& other) const;
196 bool operator!=(DlPaint const& other) const { return !(*this == other); }
197
198 private:
199#define ASSERT_ENUM_FITS(last_enum, num_bits) \
200 static_assert(static_cast<int>(last_enum) < (1 << num_bits) && \
201 static_cast<int>(last_enum) * 2 >= (1 << num_bits))
202
203 static constexpr int kBlendModeBits = 5;
204 static constexpr int kDrawStyleBits = 2;
205 static constexpr int kStrokeCapBits = 2;
206 static constexpr int kStrokeJoinBits = 2;
211
212 union {
213 struct {
214 unsigned blend_mode_ : kBlendModeBits;
215 unsigned draw_style_ : kDrawStyleBits;
216 unsigned stroke_cap_ : kStrokeCapBits;
217 unsigned stroke_join_ : kStrokeJoinBits;
218 unsigned is_anti_alias_ : 1;
219 unsigned is_invert_colors_ : 1;
220 };
221 };
222
223 DlColor color_;
224 float stroke_width_;
225 float stroke_miter_;
226
227 std::shared_ptr<const DlColorSource> color_source_;
228 std::shared_ptr<const DlColorFilter> color_filter_;
229 std::shared_ptr<const DlImageFilter> image_filter_;
230 std::shared_ptr<const DlMaskFilter> mask_filter_;
231 std::shared_ptr<const DlPathEffect> path_effect_;
232};
233
234} // namespace flutter
235
236#endif // FLUTTER_DISPLAY_LIST_DL_PAINT_H_
SkColor4f color
#define SkScalarRoundToInt(x)
Definition SkScalar.h:37
virtual std::shared_ptr< D > shared() const =0
bool isAntiAlias() const
Definition dl_paint.h:58
bool operator==(DlPaint const &other) const
Definition dl_paint.cc:20
DlPaint & setPathEffect(const DlPathEffect *effect)
Definition dl_paint.h:188
DlStrokeCap getStrokeCap() const
Definition dl_paint.h:100
DlPaint & setPathEffect(const std::shared_ptr< DlPathEffect > &pathEffect)
Definition dl_paint.h:184
bool isDefault() const
Definition dl_paint.h:193
DlColor getColor() const
Definition dl_paint.h:70
DlPaint & setColor(DlColor color)
Definition dl_paint.h:71
DlPaint & setAntiAlias(bool isAntiAlias)
Definition dl_paint.h:59
static const DlPaint kDefault
Definition dl_paint.h:53
DlPaint & setInvertColors(bool isInvertColors)
Definition dl_paint.h:65
DlBlendMode getBlendMode() const
Definition dl_paint.h:84
DlPaint & setColorFilter(const std::shared_ptr< const DlColorFilter > &filter)
Definition dl_paint.h:145
static constexpr float kDefaultWidth
Definition dl_paint.h:50
unsigned is_anti_alias_
Definition dl_paint.h:218
unsigned stroke_cap_
Definition dl_paint.h:216
DlPaint & setMaskFilter(const std::shared_ptr< DlMaskFilter > &filter)
Definition dl_paint.h:171
float getStrokeMiter() const
Definition dl_paint.h:122
DlPaint & setImageFilter(const DlImageFilter *filter)
Definition dl_paint.h:162
std::shared_ptr< const DlPathEffect > getPathEffect() const
Definition dl_paint.h:180
std::shared_ptr< const DlColorSource > getColorSource() const
Definition dl_paint.h:128
DlStrokeJoin getStrokeJoin() const
Definition dl_paint.h:108
SkScalar getOpacity() const
Definition dl_paint.h:78
DlPaint & setMaskFilter(const DlMaskFilter *filter)
Definition dl_paint.h:175
unsigned is_invert_colors_
Definition dl_paint.h:219
uint8_t getAlpha() const
Definition dl_paint.h:76
unsigned draw_style_
Definition dl_paint.h:215
const DlColorSource * getColorSourcePtr() const
Definition dl_paint.h:131
DlPaint & setStrokeCap(DlStrokeCap cap)
Definition dl_paint.h:103
const DlMaskFilter * getMaskFilterPtr() const
Definition dl_paint.h:170
DlPaint & setStrokeWidth(float width)
Definition dl_paint.h:117
DlPaint & setAlpha(uint8_t alpha)
Definition dl_paint.h:77
const DlColorFilter * getColorFilterPtr() const
Definition dl_paint.h:144
DlPaint & setStrokeMiter(float miter)
Definition dl_paint.h:123
bool operator!=(DlPaint const &other) const
Definition dl_paint.h:196
unsigned blend_mode_
Definition dl_paint.h:214
DlPaint & setBlendMode(DlBlendMode mode)
Definition dl_paint.h:87
static constexpr float kDefaultMiter
Definition dl_paint.h:51
const DlImageFilter * getImageFilterPtr() const
Definition dl_paint.h:157
const DlPathEffect * getPathEffectPtr() const
Definition dl_paint.h:183
DlDrawStyle getDrawStyle() const
Definition dl_paint.h:92
std::shared_ptr< const DlMaskFilter > getMaskFilter() const
Definition dl_paint.h:167
std::shared_ptr< const DlColorFilter > getColorFilter() const
Definition dl_paint.h:141
DlPaint & setImageFilter(const std::shared_ptr< const DlImageFilter > &filter)
Definition dl_paint.h:158
DlPaint & setColorFilter(const DlColorFilter *filter)
Definition dl_paint.h:149
float getStrokeWidth() const
Definition dl_paint.h:116
DlPaint & setOpacity(SkScalar opacity)
Definition dl_paint.h:79
std::shared_ptr< const DlImageFilter > getImageFilter() const
Definition dl_paint.h:154
DlPaint & setDrawStyle(DlDrawStyle style)
Definition dl_paint.h:95
static constexpr DlColor kDefaultColor
Definition dl_paint.h:49
DlPaint & setStrokeJoin(DlStrokeJoin join)
Definition dl_paint.h:111
DlPaint & setColorSource(std::shared_ptr< const DlColorSource > source)
Definition dl_paint.h:132
DlPaint & setColorSource(const DlColorSource *source)
Definition dl_paint.h:136
unsigned stroke_join_
Definition dl_paint.h:217
bool isInvertColors() const
Definition dl_paint.h:64
#define ASSERT_ENUM_FITS(last_enum, num_bits)
Definition dl_paint.h:199
SkBitmap source
Definition examples.cpp:28
float SkScalar
Definition extension.cpp:12
DlStrokeJoin
Definition dl_paint.h:38
@ kMiter
extends to miter limit
@ kBevel
connects outside edges
DlStrokeCap
Definition dl_paint.h:29
@ kRound
adds circle
@ kButt
no stroke extension
@ kSquare
adds square
DlDrawStyle
Definition dl_paint.h:20
@ kStrokeAndFill
both strokes and fills shapes
@ kStroke
strokes boundary of shapes
@ kFill
fills interior of shapes
it will be possible to load the file into Perfetto s trace viewer disable asset Prevents usage of any non test fonts unless they were explicitly Loaded via prefetched default font Indicates whether the embedding started a prefetch of the default font manager before creating the engine run In non interactive mode
Definition switches.h:228
@ kLastMode
last valid value
int32_t width
constexpr float getAlphaF() const
Definition dl_color.h:43
static constexpr DlColor kBlack()
Definition dl_color.h:22
constexpr DlColor withAlpha(uint8_t alpha) const
Definition dl_color.h:59
constexpr uint32_t argb() const
Definition dl_color.h:78