🎉 Avoid full tiles rebuild on set modifiers

This commit is contained in:
Alejandro Alonso 2025-03-28 07:46:00 +01:00
parent a109f11926
commit 6953a57333
3 changed files with 20 additions and 4 deletions

View file

@ -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();
});
}

View file

@ -844,6 +844,20 @@ impl RenderState {
}
}
pub fn rebuild_modifier_tiles(
&mut self,
tree: &mut HashMap<Uuid, Shape>,
modifiers: &HashMap<Uuid, Matrix>,
) {
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()
}

View file

@ -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);
}
}