From 62f1407edc74a29bd7b0b0c704641abca63e8073 Mon Sep 17 00:00:00 2001 From: valadaptive Date: Mon, 28 Oct 2024 14:09:12 -0400 Subject: [PATCH] Improve UX of bottom bar and timeline widget --- crates/gui/src/app/main.rs | 8 +++++--- crates/gui/src/widgets/timeline.rs | 11 ++++++++--- 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/crates/gui/src/app/main.rs b/crates/gui/src/app/main.rs index 3ed26f8..630abfb 100644 --- a/crates/gui/src/app/main.rs +++ b/crates/gui/src/app/main.rs @@ -1651,7 +1651,8 @@ impl NtscApp { ui.separator(); - ui.label("🔎"); + ui.add(egui::Label::new("🔎").selectable(false)) + .on_hover_text("Zoom preview"); ui.add_enabled( !self.video_zoom.fit, egui::DragValue::new(&mut self.video_zoom.scale) @@ -1684,7 +1685,7 @@ impl NtscApp { self.handle_result(res); } } - ui.label("scanlines"); + ui.label("lines"); }); ui.separator(); @@ -1764,7 +1765,8 @@ impl NtscApp { ui.separator(); let mut update_effect_preview = false; - ui.label("✨").on_hover_text("Effect preview"); + ui.add(egui::Label::new("✨").selectable(false)) + .on_hover_text("Effect preview"); update_effect_preview |= ui .selectable_value( &mut self.effect_preview.mode, diff --git a/crates/gui/src/widgets/timeline.rs b/crates/gui/src/widgets/timeline.rs index 9db1215..c7187a7 100644 --- a/crates/gui/src/widgets/timeline.rs +++ b/crates/gui/src/widgets/timeline.rs @@ -208,9 +208,14 @@ impl<'a> Widget for Timeline<'a> { let range_f64 = *self.range.start() as f64..=*self.range.end() as f64; if ui.rect_contains_pointer(rect) { - let scroll_delta = ui.ctx().input(|input| input.raw_scroll_delta); let zoom_delta = ui.ctx().input(|input| input.zoom_delta()); - let scroll_delta = scroll_delta.x + scroll_delta.y; + // If we're zooming, it may be via ctrl-scroll. We never want to zoom and scroll at the same time. + let scroll_delta = if zoom_delta == 1.0 { + let scroll_delta = ui.ctx().input(|input| input.smooth_scroll_delta); + scroll_delta.x + scroll_delta.y + } else { + 0.0 + }; if zoom_delta != 1.0 { let pointer_pos = ui.ctx().input(|i| i.pointer.hover_pos()); @@ -253,7 +258,7 @@ impl<'a> Widget for Timeline<'a> { if scroll_delta != 0.0 { let zoom_span = state.zoom_range[1] - state.zoom_range[0]; // we need to negate the scroll delta--scrolling down and right are both negative? - let delta = (-scroll_delta.signum() / rect.width()) as f64 * zoom_span; + let delta = (-scroll_delta / rect.width()) as f64 * zoom_span; if delta > 0.0 { state.zoom_range[1] = (state.zoom_range[1] + delta).min(1.0); state.zoom_range[0] = state.zoom_range[1] - zoom_span;