refactor horizontal scrolling to use same code/modifiers in Editor and PianorollMidiView

This commit is contained in:
Paul Davis 2025-11-24 11:22:50 -07:00
parent 3a337b97ea
commit 71ff8ba3e0
5 changed files with 69 additions and 60 deletions

View file

@ -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());
}
}

View file

@ -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;

View file

@ -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 ();

View file

@ -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

View file

@ -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);