From 03d31b2225981c5f50436a024a562d2f53981aff Mon Sep 17 00:00:00 2001 From: itsmattkc Date: Fri, 22 Jan 2021 19:52:05 +1100 Subject: [PATCH] fixed cursor zooming algorithm What the hell is this? How did I write this old algorithm? Did it even work? --- app/widget/nodeview/nodeview.cpp | 15 +++++++++++++++ app/widget/timebased/timebasedview.cpp | 4 ++-- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/app/widget/nodeview/nodeview.cpp b/app/widget/nodeview/nodeview.cpp index 87bbb66a0..e531082d6 100644 --- a/app/widget/nodeview/nodeview.cpp +++ b/app/widget/nodeview/nodeview.cpp @@ -22,6 +22,7 @@ #include #include +#include #include "core.h" #include "nodeviewundo.h" @@ -564,7 +565,21 @@ void NodeView::wheelEvent(QWheelEvent *event) double test_scale = scale_ * multiplier; if (test_scale > 0.1) { + QPointF cursor_pos; +#if QT_VERSION >= QT_VERSION_CHECK(5, 14, 0) + cursor_pos = event->position(); +#else + cursor_pos = event->posF(); +#endif + + int anchor_x = qRound(double(cursor_pos.x() + horizontalScrollBar()->value()) / scale_ * test_scale - cursor_pos.x()); + int anchor_y = qRound(double(cursor_pos.y() + verticalScrollBar()->value()) / scale_ * test_scale - cursor_pos.y()); + scale(multiplier, multiplier); + + this->horizontalScrollBar()->setValue(anchor_x); + this->verticalScrollBar()->setValue(anchor_y); + scale_ = test_scale; } } else { diff --git a/app/widget/timebased/timebasedview.cpp b/app/widget/timebased/timebasedview.cpp index 8b4089b58..8f29cc21f 100644 --- a/app/widget/timebased/timebasedview.cpp +++ b/app/widget/timebased/timebasedview.cpp @@ -302,7 +302,7 @@ bool TimeBasedView::HandleZoomFromScroll(QWheelEvent *event) if (!only_vertical) { double new_x_scale = GetScale() * scale_multiplier; - int new_x_scroll = qRound(horizontalScrollBar()->value() / GetScale() * new_x_scale + (cursor_pos.x() - cursor_pos.x() / new_x_scale * GetScale())); + int new_x_scroll = qRound(double(cursor_pos.x() + horizontalScrollBar()->value()) / GetScale() * new_x_scale - cursor_pos.x()); emit ScaleChanged(new_x_scale); @@ -312,7 +312,7 @@ bool TimeBasedView::HandleZoomFromScroll(QWheelEvent *event) if (!only_horizontal) { double new_y_scale = GetYScale() * scale_multiplier; - int new_y_scroll = qRound(verticalScrollBar()->value() / GetYScale() * new_y_scale + (cursor_pos.y() - cursor_pos.y() / new_y_scale * GetYScale())); + int new_y_scroll = qRound(double(cursor_pos.y() + verticalScrollBar()->value()) / GetYScale() * new_y_scale - cursor_pos.y()); SetYScale(new_y_scale);