diff --git a/render-wasm/src/main.rs b/render-wasm/src/main.rs index 005bf31781..c435e03ded 100644 --- a/render-wasm/src/main.rs +++ b/render-wasm/src/main.rs @@ -412,6 +412,9 @@ fn set_children_set(entries: Vec) { for id in entries { state.touch_shape(id); + if let Some(children_shape) = state.shapes.get_mut(&id) { + children_shape.set_deleted(false); + } } }); diff --git a/render-wasm/src/render/ui.rs b/render-wasm/src/render/ui.rs index 97c8dd4867..7d6436fbc8 100644 --- a/render-wasm/src/render/ui.rs +++ b/render-wasm/src/render/ui.rs @@ -45,6 +45,10 @@ pub fn render(render_state: &mut RenderState, shapes: ShapesPoolRef) { continue; } + if shape.deleted() { + continue; + } + if let Some(shape) = shapes.get(&shape.id) { grid_layout::render_overlay(zoom, canvas, shape, shapes); } diff --git a/render-wasm/src/shapes.rs b/render-wasm/src/shapes.rs index 2eed111226..8967b6ee49 100644 --- a/render-wasm/src/shapes.rs +++ b/render-wasm/src/shapes.rs @@ -196,6 +196,7 @@ pub struct Shape { pub extrect_cache: RefCell>, pub svg_transform: Option, pub ignore_constraints: bool, + deleted: bool, } // Returns all ancestor shapes of this shape, traversing up the parent hierarchy @@ -284,6 +285,7 @@ impl Shape { extrect_cache: RefCell::new(None), svg_transform: None, ignore_constraints: false, + deleted: false, } } @@ -441,6 +443,14 @@ impl Shape { self.svg_transform } + pub fn set_deleted(&mut self, value: bool) { + self.deleted = value; + } + + pub fn deleted(&self) -> bool { + self.deleted + } + // FIXME: These arguments could be grouped or simplified #[allow(clippy::too_many_arguments)] pub fn set_flex_layout_child_data( diff --git a/render-wasm/src/state.rs b/render-wasm/src/state.rs index 7762d4b5aa..b99b768334 100644 --- a/render-wasm/src/state.rs +++ b/render-wasm/src/state.rs @@ -157,6 +157,10 @@ impl State { self.render_state.tiles.remove_shape_at(tile, shape.id); } } + + if let Some(shape_to_delete) = self.shapes.get_mut(&id) { + shape_to_delete.set_deleted(true); + } } }