From e44a3d221d45786e4194ba9dd77268c565370ea0 Mon Sep 17 00:00:00 2001 From: itsmattkc <34096995+itsmattkc@users.noreply.github.com> Date: Wed, 22 Feb 2023 10:01:53 -0800 Subject: [PATCH] viewersizer: zoom by float and anchor by cursor --- app/widget/viewer/viewersizer.cpp | 35 ++++++++++++++----------------- 1 file changed, 16 insertions(+), 19 deletions(-) diff --git a/app/widget/viewer/viewersizer.cpp b/app/widget/viewer/viewersizer.cpp index 505cb4eb9..51be32d62 100644 --- a/app/widget/viewer/viewersizer.cpp +++ b/app/widget/viewer/viewersizer.cpp @@ -104,31 +104,28 @@ bool ViewerSizer::eventFilter(QObject *watched, QEvent *event) QWheelEvent *w = static_cast(event); if (HandMovableView::WheelEventIsAZoomEvent(w)) { - int x = w->angleDelta().x() + w->angleDelta().y(); - int current_percent = zoom_; if (current_percent == 0) { // Currently set to "fit" current_percent = current_widget_scale_; } - if (x > 0) { - // Zoom in - for (int i=kZoomLevelCount-2; i>=0; i--) { - if (current_percent >= kZoomLevels[i]) { - SetZoom(kZoomLevels[i+1]); - break; - } - } - } else if (x < 0) { - // Zoom out - for (int i=1; iposition(); + + int anchor_x = qRound(double(cursor_pos.x() + horiz_scrollbar_->value()) / cur_scale * next_scale - cursor_pos.x()); + int anchor_y = qRound(double(cursor_pos.y() + vert_scrollbar_->value()) / cur_scale * next_scale - cursor_pos.y()); + + SetZoom(current_percent); + + horiz_scrollbar_->setValue(anchor_x); + vert_scrollbar_->setValue(anchor_y); } else { // Pass scroll values to scrollbars QPoint p = w->pixelDelta();