graphic design tool
git clone https://git.lucas.co/cce-designer.git
refactor: dispatch roots go by WidgetId (cce-ui plumbing retype)
propagate_event takes a WidgetId resolved through the registry; dispatch
sites name roots by id instead of minting raw pointers, and roots the
render path never registered are registered explicitly.
Co-Authored-By: Claude Fable 5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01N4ajhvVZtyEEEus9bodsj3
src/app.rs | 6 +++---
src/render.rs | 10 ++++++----
2 files changed, 9 insertions(+), 7 deletions(-)
diff --git a/src/app.rs b/src/app.rs
index 668a47e..8d82be6 100644
--- a/src/app.rs
+++ b/src/app.rs
@@ -4175,8 +4175,8 @@ pub(crate) fn geometry_to_spreadsheet_data(geom: &Geometry) -> (Vec<String>, Vec
if i == VIEWPORT_IDX {
continue;
}
- let ptr = self.slots.get_dyn_mut(i).as_ptr_mut();
- if self.ui_context.propagate_event(&wheel_ev, ptr) {
+ let root = self.slots.get_dyn_mut(i).base().id();
+ if self.ui_context.propagate_event(&wheel_ev, root) {
handled = true;
if i == CONTENT_IDX {
let active_node_area_y = self.positions[CONTENT_IDX].1;
@@ -4217,7 +4217,7 @@ pub(crate) fn geometry_to_spreadsheet_data(geom: &Geometry) -> (Vec<String>, Vec
}
}
if !handled {
- let vp = self.slots.viewport.as_ptr_mut();
+ let vp = self.slots.viewport.id();
if self.ui_context.propagate_event(&wheel_ev, vp) {
handled = true;
}
diff --git a/src/render.rs b/src/render.rs
index cbe6e68..6902a35 100644
--- a/src/render.rs
+++ b/src/render.rs
@@ -108,11 +108,13 @@ impl State {
let widget_ptrs: Vec<*mut (dyn WidgetHost + 'static)> = (0..WIDGET_COUNT)
.map(|i| self.slots.get_dyn(i).as_ptr())
.collect();
- for &i in &draw_order {
+ // Register ALL slots, visible or not (id-rooted router): the wheel loop and the
+ // hidden-widget broadcasts dispatch by id over the whole roster, and visibility
+ // gates behavior inside the widget — an unregistered hidden root would drop the
+ // event before that gate.
+ for i in 0..WIDGET_COUNT {
let w = self.slots.get_dyn(i);
- if w.visible() {
- self.ui_context.register_widget(w.base().id(), w.as_ptr());
- }
+ self.ui_context.register_widget(w.base().id(), w.as_ptr());
}
let mut visited = vec![false; WIDGET_COUNT];