From 635fcdc2068a8ec5f2a066ee0896b331b4ec7f99 Mon Sep 17 00:00:00 2001 From: Robin Gareus Date: Sat, 5 Apr 2025 20:53:15 +0200 Subject: [PATCH] Add scroll-wheel support to RT Analyzer --- gtk2_ardour/rta_window.cc | 32 ++++++++++++++++++++++++++++++++ gtk2_ardour/rta_window.h | 1 + 2 files changed, 33 insertions(+) diff --git a/gtk2_ardour/rta_window.cc b/gtk2_ardour/rta_window.cc index 22221c663f..b065a65e2a 100644 --- a/gtk2_ardour/rta_window.cc +++ b/gtk2_ardour/rta_window.cc @@ -61,6 +61,7 @@ RTAWindow::RTAWindow () _darea.signal_button_press_event ().connect (sigc::mem_fun (*this, &RTAWindow::darea_button_press_event)); _darea.signal_button_release_event ().connect (sigc::mem_fun (*this, &RTAWindow::darea_button_release_event)); _darea.signal_motion_notify_event ().connect (sigc::mem_fun (*this, &RTAWindow::darea_motion_notify_event)); + _darea.signal_scroll_event ().connect (sigc::mem_fun (*this, &RTAWindow::darea_scroll_event), false); _darea.signal_leave_notify_event ().connect (sigc::mem_fun (*this, &RTAWindow::darea_leave_notify_event), false); _speed_strings.push_back (_("Rapid")); @@ -432,6 +433,37 @@ RTAWindow::darea_motion_notify_event (GdkEventMotion* ev) return true; } +bool +RTAWindow::darea_scroll_event (GdkEventScroll* ev) +{ + if (_dragging_dB != DragNone || !_hovering_dB) { + return true; + } + + float new_dB = _min_dB; + switch (ev->direction) { + case GDK_SCROLL_UP: + new_dB += 1; + break; + case GDK_SCROLL_DOWN: + new_dB -= 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; + + _grid.clear (); + _darea.queue_draw (); + return true; +} + void RTAWindow::darea_size_allocate (Gtk::Allocation&) { diff --git a/gtk2_ardour/rta_window.h b/gtk2_ardour/rta_window.h index 3698e55922..16159f5753 100644 --- a/gtk2_ardour/rta_window.h +++ b/gtk2_ardour/rta_window.h @@ -56,6 +56,7 @@ private: bool darea_button_press_event (GdkEventButton*); bool darea_button_release_event (GdkEventButton*); bool darea_motion_notify_event (GdkEventMotion*); + bool darea_scroll_event (GdkEventScroll*); bool darea_leave_notify_event (GdkEventCrossing*); void set_rta_speed (ARDOUR::DSP::PerceptualAnalyzer::Speed);