From 4b8febd10d3e1cf3d38af75d7494ef7fc4bee73f Mon Sep 17 00:00:00 2001 From: itsmattkc <34096995+itsmattkc@users.noreply.github.com> Date: Fri, 15 Jul 2022 09:47:58 -0700 Subject: [PATCH] timebasedview: cache scroll value before scale change on ctrl zoom Fixes bug where scroll would be calculated incorrectly due to range limitation from scale change --- app/widget/timebased/timebasedview.cpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/app/widget/timebased/timebasedview.cpp b/app/widget/timebased/timebasedview.cpp index fe54459e2..310df8866 100644 --- a/app/widget/timebased/timebasedview.cpp +++ b/app/widget/timebased/timebasedview.cpp @@ -109,20 +109,24 @@ void TimeBasedView::ZoomIntoCursorPosition(QWheelEvent *event, double scale_mult } if (!only_vertical) { + double old_scroll = horizontalScrollBar()->value(); + double old_scale = GetScale(); emit ScaleChanged(old_scale * scale_multiplier); // Use GetScale so that if this value was clamped, we don't erroneously use an unclamped value - int new_x_scroll = qRound(double(cursor_pos.x() + horizontalScrollBar()->value()) / old_scale * GetScale() - cursor_pos.x()); + int new_x_scroll = qRound((cursor_pos.x() + old_scroll) / old_scale * GetScale() - cursor_pos.x()); horizontalScrollBar()->setValue(new_x_scroll); } if (!only_horizontal) { + double old_y_scroll = verticalScrollBar()->value(); + double old_y_scale = GetYScale(); SetYScale(old_y_scale * scale_multiplier); // Use GetYScale so that if this value was clamped, we don't erroneously use an unclamped value - int new_y_scroll = qRound(double(cursor_pos.y() + verticalScrollBar()->value()) / old_y_scale * GetYScale() - cursor_pos.y()); + int new_y_scroll = qRound((cursor_pos.y() + old_y_scroll) / old_y_scale * GetYScale() - cursor_pos.y()); verticalScrollBar()->setValue(new_y_scroll); } }