git.lucas.co / cce-color-editor
color picker and palette editor
git clone https://git.lucas.co/cce-color-editor.git

commitd7b5dbdc5a08c75dd85d719883cb3e4ab0eb5fb9
parent678f999e39
authorLucas Galante <[email protected]>
date2026-07-13 09:29
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/main.rs | 22 +++++++++++-----------
 1 file changed, 11 insertions(+), 11 deletions(-)

diff --git a/src/main.rs b/src/main.rs
index f67a3f5..29642e0 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -738,7 +738,7 @@ impl Application for ColorApp {
             let self_ptr = self as *mut Self;
             unsafe {
                 for slider in (*self_ptr).sliders.iter_mut() {
-                    if self.ui_context.propagate_event(&event, slider.as_ptr_mut()) {
+                    if self.ui_context.propagate_event(&event, slider.id()) {
                         any = true;
                         break;
                     }
@@ -822,14 +822,14 @@ impl Application for ColorApp {
         // dragging index; DragUpdate reaches the drag target even off-rect).
         let ev = Event::PointerMove { x: pos.x, y: pos.y, local_x: pos.x, local_y: pos.y };
         if self.expecting_output {
-            let apply = self.apply_btn.as_ptr_mut();
+            let apply = self.apply_btn.id();
             self.ui_context.propagate_event(&ev, apply);
-            let cancel = self.cancel_btn.as_ptr_mut();
+            let cancel = self.cancel_btn.id();
             self.ui_context.propagate_event(&ev, cancel);
         }
-        let slider_ptrs: Vec<_> = self.sliders.iter_mut().map(|s| s.as_ptr_mut()).collect();
-        for ptr in slider_ptrs {
-            self.ui_context.propagate_event(&ev, ptr);
+        let slider_roots: Vec<_> = self.sliders.iter().map(|s| s.id()).collect();
+        for root in slider_roots {
+            self.ui_context.propagate_event(&ev, root);
         }
         // Drain the drag's value change like the wheel path does.
         let mut changed_slider = None;
@@ -861,13 +861,13 @@ impl Application for ColorApp {
         let mut handled = false;
 
         if self.expecting_output {
-            let apply = self.apply_btn.as_ptr_mut();
+            let apply = self.apply_btn.id();
             if self.ui_context.propagate_event(&ev, apply) {
                 handled = true;
                 *needs_rebuild = true;
                 self.needs_rebuild = true;
             }
-            let cancel = self.cancel_btn.as_ptr_mut();
+            let cancel = self.cancel_btn.id();
             if self.ui_context.propagate_event(&ev, cancel) {
                 handled = true;
                 *needs_rebuild = true;
@@ -883,9 +883,9 @@ impl Application for ColorApp {
         }
 
         if !handled {
-            let slider_ptrs: Vec<_> = self.sliders.iter_mut().map(|s| s.as_ptr_mut()).collect();
-            for ptr in slider_ptrs {
-                if self.ui_context.propagate_event(&ev, ptr) {
+            let slider_roots: Vec<_> = self.sliders.iter().map(|s| s.id()).collect();
+            for root in slider_roots {
+                if self.ui_context.propagate_event(&ev, root) {
                     break;
                 }
             }