feat(iced): implement shape_sync bidirectional sync

This commit is contained in:
2026-07-16 05:33:05 +03:00
parent e53d144626
commit d9cae597f9
3 changed files with 173 additions and 3 deletions
+11 -3
View File
@@ -1447,15 +1447,14 @@ impl HcieIcedApp {
Message::FgColorChanged(color) => {
self.fg_color = color;
self.active_document_mut().engine.set_color(color);
// Record the new color in the recent-colors list so the
// picker's recent swatches populate (egui does this on
// drag-stopped/click in color.rs:316/816/915).
self.add_recent_color(color);
self.colors_dirty = true;
crate::shape_sync::sync_shape_from_tool(self);
}
Message::BgColorChanged(color) => {
self.bg_color = color;
crate::shape_sync::sync_shape_from_tool(self);
}
Message::SwapColors => {
@@ -1464,6 +1463,7 @@ impl HcieIcedApp {
self.active_document_mut().engine.set_color(color);
self.add_recent_color(color);
self.colors_dirty = true;
crate::shape_sync::sync_shape_from_tool(self);
}
Message::ResetColors => {
// Reset fg=black, bg=white (egui: toolbox.rs:351-354).
@@ -2725,26 +2725,32 @@ impl HcieIcedApp {
}
Message::VectorStrokeChanged(s) => {
self.settings.tool_settings.vector_stroke_width = s;
crate::shape_sync::sync_shape_from_tool(self);
let _ = self.settings.save();
}
Message::VectorOpacityChanged(o) => {
self.settings.tool_settings.vector_opacity = o;
crate::shape_sync::sync_shape_from_tool(self);
let _ = self.settings.save();
}
Message::VectorFillToggled(f) => {
self.settings.tool_settings.vector_fill = f;
crate::shape_sync::sync_shape_from_tool(self);
let _ = self.settings.save();
}
Message::VectorRadiusChanged(r) => {
self.settings.tool_settings.vector_radius = r;
crate::shape_sync::sync_shape_from_tool(self);
let _ = self.settings.save();
}
Message::VectorPointsChanged(p) => {
self.settings.tool_settings.vector_points = p;
crate::shape_sync::sync_shape_from_tool(self);
let _ = self.settings.save();
}
Message::VectorSidesChanged(s) => {
self.settings.tool_settings.vector_sides = s;
crate::shape_sync::sync_shape_from_tool(self);
let _ = self.settings.save();
}
Message::TextFontChanged(font) => {
@@ -3487,6 +3493,7 @@ impl HcieIcedApp {
doc.vector_draw = None; // clear any preview
doc.vector_edit_handle = VEH::Move;
self.vector_drag_last = Some((x, y));
crate::shape_sync::sync_tool_from_shape(self);
} else {
// No shape under cursor — deselect.
let doc = &mut self.documents[self.active_doc];
@@ -3561,6 +3568,7 @@ impl HcieIcedApp {
if idx.is_some() {
let snapshot = self.documents[self.active_doc].engine.active_vector_shapes();
self.vector_shapes_snapshot = snapshot;
crate::shape_sync::sync_tool_from_shape(self);
} else {
self.vector_shapes_snapshot = None;
}