diff --git a/render-wasm/src/main.rs b/render-wasm/src/main.rs index ef5bbdff45..e0ef988590 100644 --- a/render-wasm/src/main.rs +++ b/render-wasm/src/main.rs @@ -613,10 +613,7 @@ pub extern "C" fn set_modifiers() { for entry in entries { state.modifiers.insert(entry.id, entry.transform); } - // TODO: Do a more specific rebuild of tiles. For - // example: using only the selected shapes to rebuild - // the tiles affected by the selected shapes. - state.rebuild_tiles(); + state.rebuild_modifier_tiles(); }); } diff --git a/render-wasm/src/render.rs b/render-wasm/src/render.rs index 0a1f775739..c53bcee72b 100644 --- a/render-wasm/src/render.rs +++ b/render-wasm/src/render.rs @@ -844,6 +844,20 @@ impl RenderState { } } + pub fn rebuild_modifier_tiles( + &mut self, + tree: &mut HashMap, + modifiers: &HashMap, + ) { + for (uuid, matrix) in modifiers { + if let Some(shape) = tree.get(uuid) { + let mut shape = shape.clone(); + shape.apply_transform(matrix); + self.update_tile_for(&shape); + } + } + } + pub fn get_scale(&self) -> f32 { self.viewbox.zoom() * self.options.dpr() } diff --git a/render-wasm/src/state.rs b/render-wasm/src/state.rs index 347880513c..41872e7b06 100644 --- a/render-wasm/src/state.rs +++ b/render-wasm/src/state.rs @@ -111,4 +111,9 @@ impl<'a> State<'a> { self.render_state .rebuild_tiles(&mut self.shapes, &self.modifiers); } + + pub fn rebuild_modifier_tiles(&mut self) { + self.render_state + .rebuild_modifier_tiles(&mut self.shapes, &self.modifiers); + } }