Flutter Engine
 
Loading...
Searching...
No Matches
flutter::Paint Class Reference

#include <paint.h>

Public Member Functions

 Paint (Dart_Handle paint_objects, Dart_Handle paint_data)
 
const DlPaintpaint (DlPaint &paint, const DisplayListAttributeFlags &flags, DlTileMode tile_mode) const
 
bool isNull () const
 
bool isNotNull () const
 

Detailed Description

Definition at line 14 of file paint.h.

Constructor & Destructor Documentation

◆ Paint()

flutter::Paint::Paint ( Dart_Handle  paint_objects,
Dart_Handle  paint_data 
)

Definition at line 82 of file paint.cc.

83 : paint_objects_(paint_objects), paint_data_(paint_data) {}

Member Function Documentation

◆ isNotNull()

bool flutter::Paint::isNotNull ( ) const
inline

Definition at line 23 of file paint.h.

23{ return !Dart_IsNull(paint_data_); }

◆ isNull()

bool flutter::Paint::isNull ( ) const
inline

Definition at line 22 of file paint.h.

22{ return Dart_IsNull(paint_data_); }

◆ paint()

const DlPaint * flutter::Paint::paint ( DlPaint paint,
const DisplayListAttributeFlags flags,
DlTileMode  tile_mode 
) const

Definition at line 85 of file paint.cc.

87 {
88 if (isNull()) {
89 return nullptr;
90 }
91 tonic::DartByteData byte_data(paint_data_);
92 FML_CHECK(byte_data.length_in_bytes() == kDataByteCount);
93
94 const uint32_t* uint_data = static_cast<const uint32_t*>(byte_data.data());
95 const float* float_data = static_cast<const float*>(byte_data.data());
96
97 Dart_Handle values[kObjectCount];
98 if (Dart_IsNull(paint_objects_)) {
99 if (flags.applies_shader()) {
100 paint.setColorSource(nullptr);
101 }
102 if (flags.applies_color_filter()) {
103 paint.setColorFilter(nullptr);
104 }
105 if (flags.applies_image_filter()) {
106 paint.setImageFilter(nullptr);
107 }
108 } else {
109 FML_DCHECK(Dart_IsList(paint_objects_));
110 intptr_t length = 0;
111 Dart_ListLength(paint_objects_, &length);
112
113 FML_CHECK(length == kObjectCount);
114 if (Dart_IsError(
115 Dart_ListGetRange(paint_objects_, 0, kObjectCount, values))) {
116 return nullptr;
117 }
118
119 if (flags.applies_shader()) {
120 Dart_Handle shader = values[kShaderIndex];
121 if (Dart_IsNull(shader)) {
122 paint.setColorSource(nullptr);
123 } else {
124 if (Shader* decoded = tonic::DartConverter<Shader*>::FromDart(shader)) {
125 auto sampling =
126 ImageFilter::SamplingFromIndex(uint_data[kFilterQualityIndex]);
127 paint.setColorSource(decoded->shader(sampling));
128 } else {
129 paint.setColorSource(nullptr);
130 }
131 }
132 }
133
134 if (flags.applies_color_filter()) {
135 Dart_Handle color_filter = values[kColorFilterIndex];
136 if (Dart_IsNull(color_filter)) {
137 paint.setColorFilter(nullptr);
138 } else {
139 ColorFilter* decoded =
141 paint.setColorFilter(decoded->filter());
142 }
143 }
144
145 if (flags.applies_image_filter()) {
146 Dart_Handle image_filter = values[kImageFilterIndex];
147 if (Dart_IsNull(image_filter)) {
148 paint.setImageFilter(nullptr);
149 } else {
150 ImageFilter* decoded =
152 paint.setImageFilter(decoded->filter(tile_mode));
153 }
154 }
155 }
156
157 if (flags.applies_anti_alias()) {
158 paint.setAntiAlias(uint_data[kIsAntiAliasIndex] == 0);
159 }
160
161 if (flags.applies_alpha_or_color()) {
162 paint.setColor(ReadColor(byte_data));
163 }
164
165 if (flags.applies_blend()) {
166 uint32_t encoded_blend_mode = uint_data[kBlendModeIndex];
167 uint32_t blend_mode = encoded_blend_mode ^ kBlendModeDefault;
169 }
170
171 if (flags.applies_style()) {
172 uint32_t style = uint_data[kStyleIndex];
173 paint.setDrawStyle(static_cast<DlDrawStyle>(style));
174 }
175
176 if (flags.is_stroked(paint.getDrawStyle())) {
177 float stroke_width = float_data[kStrokeWidthIndex];
178 paint.setStrokeWidth(stroke_width);
179
180 float stroke_miter_limit = float_data[kStrokeMiterLimitIndex];
181 paint.setStrokeMiter(stroke_miter_limit + kStrokeMiterLimitDefault);
182
183 uint32_t stroke_cap = uint_data[kStrokeCapIndex];
184 paint.setStrokeCap(static_cast<DlStrokeCap>(stroke_cap));
185
186 uint32_t stroke_join = uint_data[kStrokeJoinIndex];
187 paint.setStrokeJoin(static_cast<DlStrokeJoin>(stroke_join));
188 }
189
190 if (flags.applies_color_filter()) {
191 paint.setInvertColors(uint_data[kInvertColorIndex] != 0);
192 }
193
194 if (flags.applies_mask_filter()) {
195 switch (uint_data[kMaskFilterIndex]) {
196 case kNull:
197 paint.setMaskFilter(nullptr);
198 break;
199 case kBlur:
200 DlBlurStyle blur_style =
201 static_cast<DlBlurStyle>(uint_data[kMaskFilterBlurStyleIndex]);
202 double sigma = float_data[kMaskFilterSigmaIndex];
204 DlBlurMaskFilter::Make(blur_style, SafeNarrow(sigma)));
205 break;
206 }
207 }
208
209 return &paint;
210}
DlPaint & setColor(DlColor color)
Definition dl_paint.h:70
DlPaint & setAntiAlias(bool isAntiAlias)
Definition dl_paint.h:58
DlPaint & setInvertColors(bool isInvertColors)
Definition dl_paint.h:64
DlPaint & setStrokeCap(DlStrokeCap cap)
Definition dl_paint.h:101
DlPaint & setStrokeWidth(float width)
Definition dl_paint.h:115
DlPaint & setStrokeMiter(float miter)
Definition dl_paint.h:121
DlPaint & setBlendMode(DlBlendMode mode)
Definition dl_paint.h:85
DlDrawStyle getDrawStyle() const
Definition dl_paint.h:90
DlPaint & setImageFilter(std::nullptr_t filter)
Definition dl_paint.h:167
DlPaint & setMaskFilter(std::nullptr_t filter)
Definition dl_paint.h:185
DlPaint & setDrawStyle(DlDrawStyle style)
Definition dl_paint.h:93
DlPaint & setStrokeJoin(DlStrokeJoin join)
Definition dl_paint.h:109
DlPaint & setColorFilter(std::nullptr_t filter)
Definition dl_paint.h:149
DlPaint & setColorSource(std::nullptr_t source)
Definition dl_paint.h:131
const DlPaint * paint(DlPaint &paint, const DisplayListAttributeFlags &flags, DlTileMode tile_mode) const
Definition paint.cc:85
bool isNull() const
Definition paint.h:22
#define FML_CHECK(condition)
Definition logging.h:104
#define FML_DCHECK(condition)
Definition logging.h:122
size_t length
constexpr int kStrokeJoinIndex
Definition paint.cc:35
DlStrokeJoin
Definition dl_paint.h:37
constexpr int kShaderIndex
Definition paint.cc:47
constexpr int kBlendModeIndex
Definition paint.cc:31
DlStrokeCap
Definition dl_paint.h:28
constexpr int kStyleIndex
Definition paint.cc:32
constexpr int kMaskFilterSigmaIndex
Definition paint.cc:40
constexpr int kStrokeCapIndex
Definition paint.cc:34
constexpr int kObjectCount
Definition paint.cc:50
DlDrawStyle
Definition dl_paint.h:19
constexpr uint32_t kBlendModeDefault
Definition paint.cc:53
constexpr int kColorFilterIndex
Definition paint.cc:48
constexpr int kStrokeMiterLimitIndex
Definition paint.cc:36
constexpr int kImageFilterIndex
Definition paint.cc:49
impeller::BlendMode DlBlendMode
constexpr int kStrokeWidthIndex
Definition paint.cc:33
@ kBlur
Definition paint.cc:61
@ kNull
Definition paint.cc:61
constexpr int kMaskFilterBlurStyleIndex
Definition paint.cc:39
const flutter::DlColorFilter * color_filter
Definition paint.h:77
const flutter::DlImageFilter * image_filter
Definition paint.h:78
Style style
Definition paint.h:81
BlendMode blend_mode
Definition paint.h:82

References flutter::DisplayListAttributeFlags::applies_alpha_or_color(), flutter::DisplayListAttributeFlags::applies_anti_alias(), flutter::DisplayListAttributeFlags::applies_blend(), flutter::DisplayListAttributeFlags::applies_color_filter(), flutter::DisplayListAttributeFlags::applies_image_filter(), flutter::DisplayListAttributeFlags::applies_mask_filter(), flutter::DisplayListAttributeFlags::applies_shader(), flutter::DisplayListAttributeFlags::applies_style(), impeller::Paint::blend_mode, impeller::Paint::color_filter, tonic::DartByteData::data(), flutter::ColorFilter::filter(), flutter::ImageFilter::filter(), FML_CHECK, FML_DCHECK, flutter::DlPaint::getDrawStyle(), impeller::Paint::image_filter, flutter::DisplayListAttributeFlags::is_stroked(), flutter::kBlendModeDefault, flutter::kBlendModeIndex, flutter::kBlur, flutter::kColorFilterIndex, flutter::kDataByteCount, flutter::kFilterQualityIndex, flutter::kImageFilterIndex, flutter::kInvertColorIndex, flutter::kIsAntiAliasIndex, flutter::kMaskFilterBlurStyleIndex, flutter::kMaskFilterIndex, flutter::kMaskFilterSigmaIndex, flutter::kNull, flutter::kObjectCount, flutter::kShaderIndex, flutter::kStrokeCapIndex, flutter::kStrokeJoinIndex, flutter::kStrokeMiterLimitDefault, flutter::kStrokeMiterLimitIndex, flutter::kStrokeWidthIndex, flutter::kStyleIndex, length, tonic::DartByteData::length_in_bytes(), flutter::DlPaint::setAntiAlias(), flutter::DlPaint::setBlendMode(), flutter::DlPaint::setColor(), flutter::DlPaint::setColorFilter(), flutter::DlPaint::setColorSource(), flutter::DlPaint::setDrawStyle(), flutter::DlPaint::setImageFilter(), flutter::DlPaint::setInvertColors(), flutter::DlPaint::setMaskFilter(), flutter::DlPaint::setStrokeCap(), flutter::DlPaint::setStrokeJoin(), flutter::DlPaint::setStrokeMiter(), flutter::DlPaint::setStrokeWidth(), and impeller::Paint::style.


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