From aecbe6de50208a4fed37e7612fb7d6892d15d3be Mon Sep 17 00:00:00 2001 From: Robin Gareus Date: Tue, 15 Apr 2025 00:25:28 +0200 Subject: [PATCH] RTA: allow to zoom using shift + scroll --- gtk2_ardour/rta_window.cc | 30 ++++++++++++++++++++---------- 1 file changed, 20 insertions(+), 10 deletions(-) diff --git a/gtk2_ardour/rta_window.cc b/gtk2_ardour/rta_window.cc index d526d306d8..974b65cf50 100644 --- a/gtk2_ardour/rta_window.cc +++ b/gtk2_ardour/rta_window.cc @@ -31,6 +31,7 @@ #include "ardour_ui.h" #include "gui_thread.h" +#include "keyboard.h" #include "rta_manager.h" #include "rta_window.h" #include "timers.h" @@ -486,24 +487,33 @@ RTAWindow::darea_scroll_event (GdkEventScroll* ev) return true; } - float new_dB = _min_dB; + float delta = 0; switch (ev->direction) { case GDK_SCROLL_UP: - new_dB += 1; + delta = 1; break; case GDK_SCROLL_DOWN: - new_dB -= 1; + delta = -1; break; default: return true; } - /* compare to DragRange */ - float min_dB = rintf (std::max (_dB_min, std::min (new_dB, _max_dB - _dB_span))); - float dbd = (min_dB - _min_dB); - float max_dB = rintf (std::min (_dB_min + _dB_range, std::max (_max_dB + dbd, _min_dB + _dB_span))); - dbd = std::min (dbd, max_dB - _max_dB); - _max_dB += dbd; - _min_dB += dbd; + + using Gtkmm2ext::Keyboard; + + if (Keyboard::modifier_state_equals (ev->state, Keyboard::ScrollHorizontalModifier)) { + _min_dB = rintf (std::max (_dB_min, std::min (_min_dB - delta, _max_dB - _dB_span))); + _max_dB = rintf (std::min (_dB_min + _dB_range, std::max (_max_dB + delta, _min_dB + _dB_span))); + } else { + float new_dB = _min_dB + delta; + /* compare to DragRange */ + float min_dB = rintf (std::max (_dB_min, std::min (new_dB, _max_dB - _dB_span))); + float dbd = (min_dB - _min_dB); + float max_dB = rintf (std::min (_dB_min + _dB_range, std::max (_max_dB + dbd, _min_dB + _dB_span))); + dbd = std::min (dbd, max_dB - _max_dB); + _max_dB += dbd; + _min_dB += dbd; + } _grid.clear (); _darea.queue_draw ();