@@ -53,6 +53,7 @@ IMPLEMENT_WRAPPERTYPEINFO(ui, SceneBuilder);
5353 V (SceneBuilder, pushShaderMask) \
5454 V (SceneBuilder, pushPhysicalShape) \
5555 V (SceneBuilder, pop) \
56+ V (SceneBuilder, addRetained) \
5657 V (SceneBuilder, addPicture) \
5758 V (SceneBuilder, addTexture) \
5859 V (SceneBuilder, addChildScene) \
@@ -80,11 +81,12 @@ void SceneBuilder::pushTransform(const tonic::Float64List& matrix4) {
8081 PushLayer (std::move (layer));
8182}
8283
83- void SceneBuilder::pushOffset (double dx, double dy) {
84+ fml::RefPtr<EngineLayer> SceneBuilder::pushOffset (double dx, double dy) {
8485 SkMatrix sk_matrix = SkMatrix::MakeTrans (dx, dy);
85- auto layer = std::make_unique <flow::TransformLayer>();
86+ auto layer = std::make_shared <flow::TransformLayer>();
8687 layer->set_transform (sk_matrix);
87- PushLayer (std::move (layer));
88+ PushLayer (layer);
89+ return EngineLayer::MakeRetained (layer);
8890}
8991
9092void SceneBuilder::pushClipRect (double left,
@@ -148,21 +150,29 @@ void SceneBuilder::pushShaderMask(Shader* shader,
148150 PushLayer (std::move (layer));
149151}
150152
151- void SceneBuilder::pushPhysicalShape (const CanvasPath* path,
152- double elevation,
153- int color,
154- int shadow_color,
155- int clipBehavior) {
153+ fml::RefPtr<EngineLayer> SceneBuilder::pushPhysicalShape (const CanvasPath* path,
154+ double elevation,
155+ int color,
156+ int shadow_color,
157+ int clipBehavior) {
156158 const SkPath& sk_path = path->path ();
157159 flow::Clip clip_behavior = static_cast <flow::Clip>(clipBehavior);
158- auto layer = std::make_unique <flow::PhysicalShapeLayer>(clip_behavior);
160+ auto layer = std::make_shared <flow::PhysicalShapeLayer>(clip_behavior);
159161 layer->set_path (sk_path);
160162 layer->set_elevation (elevation);
161163 layer->set_color (static_cast <SkColor>(color));
162164 layer->set_shadow_color (static_cast <SkColor>(shadow_color));
163165 layer->set_device_pixel_ratio (
164166 UIDartState::Current ()->window ()->viewport_metrics ().device_pixel_ratio );
165- PushLayer (std::move (layer));
167+ PushLayer (layer);
168+ return EngineLayer::MakeRetained (layer);
169+ }
170+
171+ void SceneBuilder::addRetained (fml::RefPtr<EngineLayer> retainedLayer) {
172+ if (!current_layer_) {
173+ return ;
174+ }
175+ current_layer_->Add (retainedLayer->Layer ());
166176}
167177
168178void SceneBuilder::pop () {
@@ -260,7 +270,7 @@ fml::RefPtr<Scene> SceneBuilder::build() {
260270 return scene;
261271}
262272
263- void SceneBuilder::PushLayer (std::unique_ptr <flow::ContainerLayer> layer) {
273+ void SceneBuilder::PushLayer (std::shared_ptr <flow::ContainerLayer> layer) {
264274 FML_DCHECK (layer);
265275
266276 if (!root_layer_) {
0 commit comments