From 85abbfaa3efb9a8a86cc41aed4770d807c338059 Mon Sep 17 00:00:00 2001 From: Adam Barth Date: Fri, 18 Nov 2016 23:49:30 -0800 Subject: [PATCH] Fix Mozart blends of child views (flutter/engine#3248) We need to compute the paint bounds of ChildViewLayers during Preroll. Also, we need to allocate a BlendPtr before writing into it. --- engine/src/flutter/flow/layers/child_scene_layer.cc | 7 +++++++ engine/src/flutter/flow/layers/opacity_layer.cc | 1 + 2 files changed, 8 insertions(+) diff --git a/engine/src/flutter/flow/layers/child_scene_layer.cc b/engine/src/flutter/flow/layers/child_scene_layer.cc index aedff4172b4..62510b69dc0 100644 --- a/engine/src/flutter/flow/layers/child_scene_layer.cc +++ b/engine/src/flutter/flow/layers/child_scene_layer.cc @@ -19,6 +19,13 @@ void ChildSceneLayer::Preroll(PrerollContext* context, const SkMatrix& matrix) { transform_.preTranslate(offset_.x(), offset_.y()); float inverse_device_pixel_ratio = 1.f / device_pixel_ratio_; transform_.preScale(inverse_device_pixel_ratio, inverse_device_pixel_ratio); + + SkRect bounds = SkRect::MakeXYWH( + offset_.x(), offset_.y(), + physical_size_.width() * inverse_device_pixel_ratio, + physical_size_.height() * inverse_device_pixel_ratio); + set_paint_bounds(bounds); + context->child_paint_bounds = bounds; } void ChildSceneLayer::Paint(PaintContext& context) { diff --git a/engine/src/flutter/flow/layers/opacity_layer.cc b/engine/src/flutter/flow/layers/opacity_layer.cc index 51a070724b7..8721bd99081 100644 --- a/engine/src/flutter/flow/layers/opacity_layer.cc +++ b/engine/src/flutter/flow/layers/opacity_layer.cc @@ -23,6 +23,7 @@ void OpacityLayer::UpdateScene(SceneUpdateContext& context, node->op = mozart::NodeOp::New(); node->op->set_layer(mozart::LayerNodeOp::New()); node->op->get_layer()->layer_rect = mozart::RectF::From(paint_bounds()); + node->op->get_layer()->blend = mozart::Blend::New(); node->op->get_layer()->blend->alpha = alpha_; UpdateSceneChildrenInsideNode(context, container, std::move(node)); }