From 04fa47ddaf000f702649044b0502765a834241e2 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Fri, 19 May 2023 07:17:05 +0530 Subject: [PATCH] E-book viewer: Handle horizontal wheel events as section jumps in paged mode Also handle horizontal wheel events in cover flow. Fixes #2019426 [vertical mousewheel function not implemented](https://bugs.launchpad.net/calibre/+bug/2019426) --- src/calibre/gui2/cover_flow.py | 5 ++++- src/pyj/read_book/paged_mode.pyj | 20 ++++++++++++++------ 2 files changed, 18 insertions(+), 7 deletions(-) diff --git a/src/calibre/gui2/cover_flow.py b/src/calibre/gui2/cover_flow.py index f60e12d825..b662f2e55f 100644 --- a/src/calibre/gui2/cover_flow.py +++ b/src/calibre/gui2/cover_flow.py @@ -231,7 +231,10 @@ class CoverFlow(pictureflow.PictureFlow): return self.minimumSize() def wheelEvent(self, ev): - d = ev.angleDelta().y() + if ev.angleDelta().x(): + d = ev.angleDelta().x() + if ev.angleDelta().y(): + d = ev.angleDelta().y() if abs(d) > 0: ev.accept() (self.showNext if d < 0 else self.showPrevious)() diff --git a/src/pyj/read_book/paged_mode.pyj b/src/pyj/read_book/paged_mode.pyj index c868191f5a..23ecb1ee65 100644 --- a/src/pyj/read_book/paged_mode.pyj +++ b/src/pyj/read_book/paged_mode.pyj @@ -691,13 +691,18 @@ class HandleWheel: self.accumulated_scroll = 0 def onwheel(self, evt): - if not evt.deltaY: + if not (evt.deltaY or evt.deltaX): return - backward = evt.deltaY < 0 - if evt.deltaMode is window.WheelEvent.DOM_DELTA_PIXEL: - self.add_pixel_scroll(backward, Math.abs(evt.deltaY)) - else: - self.do_scroll(backward) + if evt.deltaY: + backward = evt.deltaY < 0 + if evt.deltaMode is window.WheelEvent.DOM_DELTA_PIXEL: + self.add_pixel_scroll(backward, Math.abs(evt.deltaY)) + else: + self.do_scroll(backward) + if evt.deltaX: + backward = evt.deltaX < 0 + self.do_section_jump(backward) + def add_pixel_scroll(self, backward, deltaY): now = window.performance.now() @@ -721,6 +726,9 @@ class HandleWheel: else: scroll_to_pos(pos) + def do_section_jump(self, backward): + self.reset() + next_spine_item(backward) wheel_handler = HandleWheel() onwheel = wheel_handler.onwheel