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

commit242cb6865900a30d3c13ad3a0e0d46285e38807f
parent79a78332df
authorLucas Galante <[email protected]>
date2026-06-27 21:14
Fix scroll events on color sliders by using UiContext propagate_event

 src/main.rs | 30 ++++++++++++++++++++++--------
 1 file changed, 22 insertions(+), 8 deletions(-)

diff --git a/src/main.rs b/src/main.rs
index 20451b2..08273d1 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -1,7 +1,7 @@
 use cce_ui::engine::{Application, WindowSettings, LogicalSize, LogicalPosition, EngineState};
 use cce_ui::widget::{
     Backplate, Button, Element, UiContext, MouseButton, ElementState, KeyEvent, MouseScrollDelta,
-    Widget, display::TextLabel,
+    Widget, display::TextLabel, Event,
 };
 use cce_ui::widget::focus::link_parent_child;
 use cce_ui::layout::RenderTarget;
@@ -759,15 +759,29 @@ impl Application for ColorApp {
     fn handle_mouse_wheel(&mut self, delta: &MouseScrollDelta, pos: LogicalPosition, needs_rebuild: &mut bool) {
         let px = pos.x;
         let py = pos.y;
-        for (i, slider) in self.sliders.iter_mut().enumerate() {
-            if slider.mouse_wheel(delta, px, py, &mut self.ui_context) {
-                let val = slider.value;
-                self.update_color_from_slider(i, val);
-                *needs_rebuild = true;
-                self.needs_rebuild = true;
-                break;
+        let event = Event::MouseWheel {
+            delta: *delta,
+            x: px,
+            y: py,
+            local_x: px,
+            local_y: py,
+        };
+        let root_ptr = self.root_window.as_ptr_mut();
+        let mut changed_slider = None;
+        if self.ui_context.propagate_event(&event, root_ptr) {
+            for (i, slider) in self.sliders.iter_mut().enumerate() {
+                if slider.just_changed {
+                    slider.just_changed = false;
+                    changed_slider = Some((i, slider.value));
+                    break;
+                }
             }
         }
+        if let Some((i, val)) = changed_slider {
+            self.update_color_from_slider(i, val);
+            *needs_rebuild = true;
+            self.needs_rebuild = true;
+        }
     }
 
     fn view(&mut self, _quads: &mut Vec<(f32, f32, f32, f32, [f32; 4])>, size: LogicalSize, scale: f64) {