From 624803b18da55c1d2b4d60d4937840ecb9d50353 Mon Sep 17 00:00:00 2001 From: sandorstormen Date: Wed, 4 Nov 2026 10:32:00 +0100 Subject: [PATCH] Make wheel zoom proportional to scroll distance Touchpads send many small scroll events, each of which triggered a full 1.5x zoom step. Scale zoom by pixelDelta (touchpads) or angleDelta (mouse wheels) instead. Co-Authored-By: Claude Sonnet 5.5 --- mal_gui/model_view.py | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/mal_gui/model_view.py b/mal_gui/model_view.py index 22ff52a..b3535c3 100644 --- a/mal_gui/model_view.py +++ b/mal_gui/model_view.py @@ -25,10 +25,17 @@ def zoomOut(self): def wheelEvent(self, event): """Overrides base""" - if event.angleDelta().y() > 0: - self.zoomIn() - else: - self.zoomOut() + # Touchpads report small pixel deltas at a high rate, mouse wheels + # report 120 units per notch. Scale the zoom by the actual distance + # scrolled so both feel similar and neither over-zooms. + pixel_delta = event.pixelDelta().y() + if pixel_delta: + self.zoom(1.005 ** pixel_delta) + return + + angle_delta = event.angleDelta().y() + if angle_delta: + self.zoom(1.0015 ** angle_delta) def zoom(self, factor): """Zoom one step with given factor"""