From 71ff8ba3e070f8b9311f3d12a522576a3cc5fc40 Mon Sep 17 00:00:00 2001 From: Paul Davis Date: Mon, 24 Nov 2025 11:22:50 -0700 Subject: [PATCH] refactor horizontal scrolling to use same code/modifiers in Editor and PianorollMidiView --- gtk2_ardour/editing_context.cc | 47 ++++++++++++++++++++++++++++++ gtk2_ardour/editing_context.h | 5 ++++ gtk2_ardour/editor.h | 6 ---- gtk2_ardour/editor_ops.cc | 47 ------------------------------ gtk2_ardour/pianoroll_midi_view.cc | 24 ++++++++++----- 5 files changed, 69 insertions(+), 60 deletions(-) diff --git a/gtk2_ardour/editing_context.cc b/gtk2_ardour/editing_context.cc index 053d17de77..2afa6480c3 100644 --- a/gtk2_ardour/editing_context.cc +++ b/gtk2_ardour/editing_context.cc @@ -3918,3 +3918,50 @@ EditingContext::set_minsec_ruler_scale (samplepos_t lower, samplepos_t upper) minsec_ruler_scale = minsec_show_many_hours; } } + +void +EditingContext::scroll_left_step () +{ + samplepos_t xdelta = (current_page_samples() / 8); + + if (_leftmost_sample > xdelta) { + reset_x_origin (_leftmost_sample - xdelta); + } else { + reset_x_origin (0); + } +} + + +void +EditingContext::scroll_right_step () +{ + samplepos_t xdelta = (current_page_samples() / 8); + + if (max_samplepos - xdelta > _leftmost_sample) { + reset_x_origin (_leftmost_sample + xdelta); + } else { + reset_x_origin (max_samplepos - current_page_samples()); + } +} + +void +EditingContext::scroll_left_half_page () +{ + samplepos_t xdelta = (current_page_samples() / 2); + if (_leftmost_sample > xdelta) { + reset_x_origin (_leftmost_sample - xdelta); + } else { + reset_x_origin (0); + } +} + +void +EditingContext::scroll_right_half_page () +{ + samplepos_t xdelta = (current_page_samples() / 2); + if (max_samplepos - xdelta > _leftmost_sample) { + reset_x_origin (_leftmost_sample + xdelta); + } else { + reset_x_origin (max_samplepos - current_page_samples()); + } +} diff --git a/gtk2_ardour/editing_context.h b/gtk2_ardour/editing_context.h index 2a4fbcbece..4a983dc1ab 100644 --- a/gtk2_ardour/editing_context.h +++ b/gtk2_ardour/editing_context.h @@ -123,6 +123,11 @@ class EditingContext : public ARDOUR::SessionHandlePtr, public AxisViewProvider, virtual void stop_canvas_autoscroll () = 0; virtual bool autoscroll_active() const = 0; + void scroll_left_step (); + void scroll_right_step (); + void scroll_left_half_page (); + void scroll_right_half_page (); + virtual void redisplay_grid (bool immediate_redraw) = 0; virtual Temporal::timecnt_t get_nudge_distance (Temporal::timepos_t const & pos, Temporal::timecnt_t& next) const = 0; diff --git a/gtk2_ardour/editor.h b/gtk2_ardour/editor.h index ade2285441..747f18b1b5 100644 --- a/gtk2_ardour/editor.h +++ b/gtk2_ardour/editor.h @@ -344,12 +344,6 @@ public: bool scroll_up_one_track (bool skip_child_views = false); bool scroll_down_one_track (bool skip_child_views = false); - void scroll_left_step (); - void scroll_right_step (); - - void scroll_left_half_page (); - void scroll_right_half_page (); - void select_topmost_track (); void cleanup_regions (); diff --git a/gtk2_ardour/editor_ops.cc b/gtk2_ardour/editor_ops.cc index c23ff0ff69..6f2f8e58b8 100644 --- a/gtk2_ardour/editor_ops.cc +++ b/gtk2_ardour/editor_ops.cc @@ -1766,53 +1766,6 @@ Editor::scroll_up_one_track (bool skip_child_views) return false; } -void -Editor::scroll_left_step () -{ - samplepos_t xdelta = (current_page_samples() / 8); - - if (_leftmost_sample > xdelta) { - reset_x_origin (_leftmost_sample - xdelta); - } else { - reset_x_origin (0); - } -} - - -void -Editor::scroll_right_step () -{ - samplepos_t xdelta = (current_page_samples() / 8); - - if (max_samplepos - xdelta > _leftmost_sample) { - reset_x_origin (_leftmost_sample + xdelta); - } else { - reset_x_origin (max_samplepos - current_page_samples()); - } -} - -void -Editor::scroll_left_half_page () -{ - samplepos_t xdelta = (current_page_samples() / 2); - if (_leftmost_sample > xdelta) { - reset_x_origin (_leftmost_sample - xdelta); - } else { - reset_x_origin (0); - } -} - -void -Editor::scroll_right_half_page () -{ - samplepos_t xdelta = (current_page_samples() / 2); - if (max_samplepos - xdelta > _leftmost_sample) { - reset_x_origin (_leftmost_sample + xdelta); - } else { - reset_x_origin (max_samplepos - current_page_samples()); - } -} - /* ZOOM */ void diff --git a/gtk2_ardour/pianoroll_midi_view.cc b/gtk2_ardour/pianoroll_midi_view.cc index ad92fd95a7..d7a203b074 100644 --- a/gtk2_ardour/pianoroll_midi_view.cc +++ b/gtk2_ardour/pianoroll_midi_view.cc @@ -196,18 +196,28 @@ PianorollMidiView::scroll (GdkEventScroll* ev) return false; } - if (Keyboard::modifier_state_equals (ev->state, Keyboard::PrimaryModifier)) { - - switch (ev->direction) { - case GDK_SCROLL_UP: + switch (ev->direction) { + case GDK_SCROLL_UP: + if (Keyboard::modifier_state_equals (ev->state, Keyboard::ScrollHorizontalModifier)) { + _editing_context.scroll_left_step (); + return true; + } + if (Keyboard::modifier_state_equals (ev->state, Keyboard::PrimaryModifier)) { _editing_context.reset_zoom (_editing_context.get_current_zoom() / 2); return true; - case GDK_SCROLL_DOWN: + } + case GDK_SCROLL_DOWN: + if (Keyboard::modifier_state_equals (ev->state, Keyboard::ScrollHorizontalModifier)) { + _editing_context.scroll_right_step (); + return true; + } + if (Keyboard::modifier_state_equals (ev->state, Keyboard::PrimaryModifier)) { _editing_context.reset_zoom (_editing_context.get_current_zoom() * 2); return true; - default: - break; } + break; + default: + break; } return MidiView::scroll (ev);