Revert "Revert "Make ShaderMaskLayer code builder aware" (#35588)" This reverts commit bd89852694fe08b12467c74a17bc6b7c5cb30563.
diff --git a/flow/layers/shader_mask_layer.cc b/flow/layers/shader_mask_layer.cc index b7dd47e..9a99a80 100644 --- a/flow/layers/shader_mask_layer.cc +++ b/flow/layers/shader_mask_layer.cc
@@ -54,19 +54,32 @@ return; } } + auto shader_rect = SkRect::MakeWH(mask_rect_.width(), mask_rect_.height()); - Layer::AutoSaveLayer save = Layer::AutoSaveLayer::Create( - context, paint_bounds(), cache_paint.sk_paint()); - PaintChildren(context); + if (context.leaf_nodes_builder) { + context.builder_multiplexer->saveLayer(&paint_bounds(), + cache_paint.dl_paint()); + PaintChildren(context); - SkPaint paint; - paint.setBlendMode(ToSk(blend_mode_)); - if (shader_) { - paint.setShader(shader_->skia_object()); + DlPaint dl_paint; + dl_paint.setBlendMode(blend_mode_); + if (shader_) { + dl_paint.setColorSource(shader_.get()); + } + context.leaf_nodes_builder->translate(mask_rect_.left(), mask_rect_.top()); + context.leaf_nodes_builder->drawRect(shader_rect, dl_paint); + } else { + Layer::AutoSaveLayer save = Layer::AutoSaveLayer::Create( + context, paint_bounds(), cache_paint.sk_paint()); + PaintChildren(context); + SkPaint paint; + paint.setBlendMode(ToSk(blend_mode_)); + if (shader_) { + paint.setShader(shader_->skia_object()); + } + context.leaf_nodes_canvas->translate(mask_rect_.left(), mask_rect_.top()); + context.leaf_nodes_canvas->drawRect(shader_rect, paint); } - context.leaf_nodes_canvas->translate(mask_rect_.left(), mask_rect_.top()); - context.leaf_nodes_canvas->drawRect( - SkRect::MakeWH(mask_rect_.width(), mask_rect_.height()), paint); } } // namespace flutter
diff --git a/flow/layers/shader_mask_layer_unittests.cc b/flow/layers/shader_mask_layer_unittests.cc index 5f6c38b..c4f863a 100644 --- a/flow/layers/shader_mask_layer_unittests.cc +++ b/flow/layers/shader_mask_layer_unittests.cc
@@ -373,17 +373,18 @@ { expected_builder.translate(offset.fX, offset.fY); /* ShaderMaskLayer::Paint() */ { - expected_builder.setColor(opacity_alpha << 24); - expected_builder.saveLayer(&child_path.getBounds(), true); + DlPaint sl_paint; + sl_paint.setColor(opacity_alpha << 24); + expected_builder.saveLayer(&child_path.getBounds(), &sl_paint); { /* child layer paint */ { - expected_builder.setColor(0xFF000000); - expected_builder.drawPath(child_path); + expected_builder.drawPath(child_path, + DlPaint().setColor(0xFF000000)); } expected_builder.translate(mask_rect.fLeft, mask_rect.fTop); - expected_builder.setBlendMode(DlBlendMode::kSrc); expected_builder.drawRect( - SkRect::MakeWH(mask_rect.width(), mask_rect.height())); + SkRect::MakeWH(mask_rect.width(), mask_rect.height()), + DlPaint().setBlendMode(DlBlendMode::kSrc)); } expected_builder.restore(); }