From ebaacb8a253079e52058c97eb3c84a24d3d18085 Mon Sep 17 00:00:00 2001 From: pax Date: Sat, 11 Apr 2026 20:06:22 -0500 Subject: [PATCH] preview_pane: accumulate scroll delta for volume control MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Hi-res scroll mice (e.g. G502) send many small angleDelta events per physical notch instead of one ±120. Without accumulation, each micro-event triggered a ±5 volume jump, making volume unusable on hi-res hardware. Now accumulates to ±120 boundaries before firing. behavior change --- booru_viewer/gui/preview_pane.py | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/booru_viewer/gui/preview_pane.py b/booru_viewer/gui/preview_pane.py index bd07081..aaef7ae 100644 --- a/booru_viewer/gui/preview_pane.py +++ b/booru_viewer/gui/preview_pane.py @@ -51,6 +51,7 @@ class ImagePreview(QWidget): self._is_bookmarked = False # tracks bookmark state for the button submenu self._current_tags: dict[str, list[str]] = {} self._current_tag_list: list[str] = [] + self._vol_scroll_accum = 0 layout = QVBoxLayout(self) layout.setContentsMargins(0, 0, 0, 0) @@ -405,9 +406,11 @@ class ImagePreview(QWidget): self.navigate.emit(1) return if self._stack.currentIndex() == 1: - delta = event.angleDelta().y() - if delta: - vol = max(0, min(100, self._video_player.volume + (5 if delta > 0 else -5))) + self._vol_scroll_accum += event.angleDelta().y() + steps = self._vol_scroll_accum // 120 + if steps: + self._vol_scroll_accum -= steps * 120 + vol = max(0, min(100, self._video_player.volume + 5 * steps)) self._video_player.volume = vol else: super().wheelEvent(event)