color picker and palette editor
git clone https://git.lucas.co/cce-color-editor.git
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) {