From e9d1ca7b3a4638b7f3394b34861426e437ec2200 Mon Sep 17 00:00:00 2001 From: pax Date: Sat, 11 Apr 2026 20:06:31 -0500 Subject: [PATCH] image_viewer: accumulate scroll delta for zoom MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Same hi-res scroll fix — accumulate angleDelta to ±120 boundaries before applying a zoom step. Uses 1.15^steps so multi-step scrolls on standard mice still feel the same. behavior change --- booru_viewer/gui/media/image_viewer.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/booru_viewer/gui/media/image_viewer.py b/booru_viewer/gui/media/image_viewer.py index efe3d35..a0de0d9 100644 --- a/booru_viewer/gui/media/image_viewer.py +++ b/booru_viewer/gui/media/image_viewer.py @@ -22,6 +22,7 @@ class ImageViewer(QWidget): self._offset = QPointF(0, 0) self._drag_start: QPointF | None = None self._drag_offset = QPointF(0, 0) + self._zoom_scroll_accum = 0 self.setMouseTracking(True) self.setFocusPolicy(Qt.FocusPolicy.StrongFocus) self._info_text = "" @@ -106,9 +107,14 @@ class ImageViewer(QWidget): # Pure horizontal tilt — let parent handle (navigation) event.ignore() return + self._zoom_scroll_accum += delta + steps = self._zoom_scroll_accum // 120 + if not steps: + return + self._zoom_scroll_accum -= steps * 120 mouse_pos = event.position() old_zoom = self._zoom - factor = 1.15 if delta > 0 else 1 / 1.15 + factor = 1.15 ** steps self._zoom = max(0.1, min(self._zoom * factor, 20.0)) ratio = self._zoom / old_zoom self._offset = mouse_pos - ratio * (mouse_pos - self._offset)