4
4
5
5
#include " impeller/display_list/display_list_dispatcher.h"
6
6
7
+ #include < optional>
8
+
7
9
#include " flutter/fml/trace_event.h"
8
10
#include " impeller/entity/contents/linear_gradient_contents.h"
9
11
#include " impeller/entity/entity.h"
@@ -157,51 +159,36 @@ void DisplayListDispatcher::setInvertColors(bool invert) {
157
159
UNIMPLEMENTED;
158
160
}
159
161
160
- // |flutter::Dispatcher|
161
- void DisplayListDispatcher::setBlendMode (SkBlendMode mode) {
162
+ std::optional<Entity::BlendMode> ToBlendMode (SkBlendMode mode) {
162
163
switch (mode) {
163
164
case SkBlendMode::kClear :
164
- paint_.blend_mode = Entity::BlendMode::kClear ;
165
- break ;
165
+ return Entity::BlendMode::kClear ;
166
166
case SkBlendMode::kSrc :
167
- paint_.blend_mode = Entity::BlendMode::kSource ;
168
- break ;
167
+ return Entity::BlendMode::kSource ;
169
168
case SkBlendMode::kDst :
170
- paint_.blend_mode = Entity::BlendMode::kDestination ;
171
- break ;
169
+ return Entity::BlendMode::kDestination ;
172
170
case SkBlendMode::kSrcOver :
173
- paint_.blend_mode = Entity::BlendMode::kSourceOver ;
174
- break ;
171
+ return Entity::BlendMode::kSourceOver ;
175
172
case SkBlendMode::kDstOver :
176
- paint_.blend_mode = Entity::BlendMode::kDestinationOver ;
177
- break ;
173
+ return Entity::BlendMode::kDestinationOver ;
178
174
case SkBlendMode::kSrcIn :
179
- paint_.blend_mode = Entity::BlendMode::kSourceIn ;
180
- break ;
175
+ return Entity::BlendMode::kSourceIn ;
181
176
case SkBlendMode::kDstIn :
182
- paint_.blend_mode = Entity::BlendMode::kDestinationIn ;
183
- break ;
177
+ return Entity::BlendMode::kDestinationIn ;
184
178
case SkBlendMode::kSrcOut :
185
- paint_.blend_mode = Entity::BlendMode::kSourceOut ;
186
- break ;
179
+ return Entity::BlendMode::kSourceOut ;
187
180
case SkBlendMode::kDstOut :
188
- paint_.blend_mode = Entity::BlendMode::kDestinationOut ;
189
- break ;
181
+ return Entity::BlendMode::kDestinationOut ;
190
182
case SkBlendMode::kSrcATop :
191
- paint_.blend_mode = Entity::BlendMode::kSourceATop ;
192
- break ;
183
+ return Entity::BlendMode::kSourceATop ;
193
184
case SkBlendMode::kDstATop :
194
- paint_.blend_mode = Entity::BlendMode::kDestinationATop ;
195
- break ;
185
+ return Entity::BlendMode::kDestinationATop ;
196
186
case SkBlendMode::kXor :
197
- paint_.blend_mode = Entity::BlendMode::kXor ;
198
- break ;
187
+ return Entity::BlendMode::kXor ;
199
188
case SkBlendMode::kPlus :
200
- paint_.blend_mode = Entity::BlendMode::kPlus ;
201
- break ;
189
+ return Entity::BlendMode::kPlus ;
202
190
case SkBlendMode::kModulate :
203
- paint_.blend_mode = Entity::BlendMode::kModulate ;
204
- break ;
191
+ return Entity::BlendMode::kModulate ;
205
192
case SkBlendMode::kScreen :
206
193
case SkBlendMode::kOverlay :
207
194
case SkBlendMode::kDarken :
@@ -217,10 +204,18 @@ void DisplayListDispatcher::setBlendMode(SkBlendMode mode) {
217
204
case SkBlendMode::kSaturation :
218
205
case SkBlendMode::kColor :
219
206
case SkBlendMode::kLuminosity :
220
- // Non-pipeline-friendly blend modes are not supported by setBlendMode
221
- // yet.
222
- UNIMPLEMENTED;
223
- break ;
207
+ return std::nullopt;
208
+ }
209
+
210
+ return std::nullopt;
211
+ }
212
+
213
+ // |flutter::Dispatcher|
214
+ void DisplayListDispatcher::setBlendMode (SkBlendMode sk_mode) {
215
+ if (auto mode = ToBlendMode (sk_mode); mode.has_value ()) {
216
+ paint_.blend_mode = mode.value ();
217
+ } else {
218
+ UNIMPLEMENTED;
224
219
}
225
220
}
226
221
@@ -459,10 +454,14 @@ void DisplayListDispatcher::clipPath(const SkPath& path,
459
454
}
460
455
461
456
// |flutter::Dispatcher|
462
- void DisplayListDispatcher::drawColor (SkColor color, SkBlendMode mode ) {
457
+ void DisplayListDispatcher::drawColor (SkColor color, SkBlendMode sk_mode ) {
463
458
Paint paint;
464
459
paint.color = ToColor (color);
465
- FML_LOG (ERROR) << " Blend mode on drawColor ignored." ;
460
+ if (auto mode = ToBlendMode (sk_mode); mode.has_value ()) {
461
+ paint.blend_mode = mode.value ();
462
+ } else {
463
+ FML_DLOG (ERROR) << " Unimplemented blend mode in " << __FUNCTION__;
464
+ }
466
465
canvas_.DrawPaint (paint);
467
466
}
468
467
0 commit comments