Viewer: Fix wheel mice that generate line scroll events per click requiring multiple wheel clicks to turn a page in paged mode. Fixes #1886231 [In 4.20 viewer, mouse wheel scroll is malfunctioning in paged mode](https://bugs.launchpad.net/calibre/+bug/1886231)

This commit is contained in:
Kovid Goyal 2020-07-04 13:02:50 +05:30
parent 714ce3624a
commit 2592198a82
No known key found for this signature in database
GPG Key ID: 06BC317B515ACE7C

View File

@ -548,30 +548,27 @@ class HandleWheel:
self.last_event_mode = 'page'
self.last_event_at = -10000
self.last_event_backwards = False
self.accumlated_scroll = 0
self.accumulated_scroll = 0
def onwheel(self, evt):
if not evt.deltaY:
return
backward = evt.deltaY < 0
WheelEvent = window.WheelEvent
if evt.deltaMode is WheelEvent.DOM_DELTA_PAGE:
self.do_scroll(backward)
if evt.deltaMode is window.WheelEvent.DOM_DELTA_PIXEL:
self.add_pixel_scroll(backward, Math.abs(evt.deltaY))
else:
self.add_event(backward, Math.abs(evt.deltaY), 'line' if evt.deltaMode is WheelEvent.DOM_DELTA_LINE else 'pixel')
self.do_scroll(backward)
def add_event(self, backward, deltaY, mode):
def add_pixel_scroll(self, backward, deltaY):
now = window.performance.now()
if now - self.last_event_at > 1000 or self.last_event_backwards is not backward or self.last_event_mode is not mode:
self.accumlated_scroll = 0
self.last_event_mode = mode
if now - self.last_event_at > 1000 or self.last_event_backwards is not backward or self.last_event_mode is not 'pixel':
self.accumulated_scroll = 0
self.last_event_mode = 'pixel'
self.last_event_at = now
self.last_event_backwards = backward
self.accumulated_scroll += deltaY
lh = line_height()
if mode is 'line':
deltaY *= lh
self.accumlated_scroll += deltaY
if self.accumlated_scroll > 5 * lh:
if self.accumulated_scroll > 5 * lh:
self.do_scroll(backward)
def do_scroll(self, backward):