mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-09 03:04:10 -04:00
Viewer: Fix mouse wheel not working when mouse is over page margins. Fixes #1850845 [Viewer problems in full-screen mode](https://bugs.launchpad.net/calibre/+bug/1850845)
This commit is contained in:
parent
51c378e1d8
commit
98c9a747d6
@ -81,17 +81,18 @@ def scroll_by(y):
|
||||
|
||||
def flow_onwheel(evt):
|
||||
dx = dy = 0
|
||||
WheelEvent = window.WheelEvent
|
||||
if evt.deltaY:
|
||||
if evt.deltaMode is evt.DOM_DELTA_PIXEL:
|
||||
if evt.deltaMode is WheelEvent.DOM_DELTA_PIXEL:
|
||||
dy = evt.deltaY
|
||||
elif evt.deltaMode is evt.DOM_DELTA_LINE:
|
||||
elif evt.deltaMode is WheelEvent.DOM_DELTA_LINE:
|
||||
dy = 15 * evt.deltaY
|
||||
if evt.deltaMode is evt.DOM_DELTA_PAGE:
|
||||
if evt.deltaMode is WheelEvent.DOM_DELTA_PAGE:
|
||||
dy = (scroll_viewport.height() - 30) * evt.deltaY
|
||||
if evt.deltaX:
|
||||
if evt.deltaMode is evt.DOM_DELTA_PIXEL:
|
||||
if evt.deltaMode is WheelEvent.DOM_DELTA_PIXEL:
|
||||
dx = evt.deltaX
|
||||
elif evt.deltaMode is evt.DOM_DELTA_LINE:
|
||||
elif evt.deltaMode is WheelEvent.DOM_DELTA_LINE:
|
||||
dx = 15 * evt.deltaX
|
||||
else:
|
||||
dx = (scroll_viewport.width() - 30) * evt.deltaX
|
||||
|
@ -94,6 +94,7 @@ class IframeBoss:
|
||||
'change_font_size': self.change_font_size,
|
||||
'change_color_scheme': self.change_color_scheme,
|
||||
'gesture_from_margin': self.gesture_from_margin,
|
||||
'wheel_from_margin': self.wheel_from_margin,
|
||||
'find': self.find,
|
||||
'window_size': self.received_window_size,
|
||||
'get_current_cfi': self.get_current_cfi,
|
||||
@ -198,6 +199,9 @@ class IframeBoss:
|
||||
def gesture_from_margin(self, data):
|
||||
self.handle_gesture(data.gesture)
|
||||
|
||||
def wheel_from_margin(self, data):
|
||||
self.onwheel(data.evt)
|
||||
|
||||
def report_human_scroll(self, scrolled_by_frac):
|
||||
self.send_message('human_scroll', scrolled_by_frac=scrolled_by_frac or None)
|
||||
|
||||
@ -374,7 +378,8 @@ class IframeBoss:
|
||||
|
||||
def onwheel(self, evt):
|
||||
if self.content_ready:
|
||||
evt.preventDefault()
|
||||
if evt.preventDefault:
|
||||
evt.preventDefault()
|
||||
if evt.deltaY and evt.ctrlKey and not evt.shiftKey and not evt.altKey and not evt.metaKey:
|
||||
self.send_message('handle_shortcut', name='increase_font_size' if evt.deltaY < 0 else 'decrease_font_size')
|
||||
else:
|
||||
|
@ -162,12 +162,12 @@ class View:
|
||||
left_margin = E.div(
|
||||
svgicon('caret-left'), style='width:{}px;'.format(sd.get('margin_left', 20)),
|
||||
class_='book-side-margin', id='book-left-margin', onclick=self.left_margin_clicked,
|
||||
oncontextmenu=self.margin_context_menu.bind(None, 'left'))
|
||||
oncontextmenu=self.margin_context_menu.bind(None, 'left'), onwheel=self.on_margin_wheel.bind(None, 'left'))
|
||||
set_left_margin_handler(left_margin)
|
||||
right_margin = E.div(
|
||||
svgicon('caret-right'), style='width:{}px;'.format(sd.get('margin_right', 20)),
|
||||
class_='book-side-margin', id='book-right-margin', onclick=self.right_margin_clicked,
|
||||
oncontextmenu=self.margin_context_menu.bind(None, 'right'))
|
||||
oncontextmenu=self.margin_context_menu.bind(None, 'right'), onwheel=self.on_margin_wheel.bind(None, 'right'))
|
||||
set_right_margin_handler(right_margin)
|
||||
iframe_id = unique_id('read-book-iframe')
|
||||
sandbox = 'allow-popups allow-scripts allow-popups-to-escape-sandbox'
|
||||
@ -279,6 +279,13 @@ class View:
|
||||
event.preventDefault(), event.stopPropagation()
|
||||
self.show_chrome()
|
||||
|
||||
def on_margin_wheel(self, which, event):
|
||||
event.preventDefault()
|
||||
evt = {}
|
||||
for attr in ('deltaX', 'deltaY', 'deltaMode', 'altKey', 'ctrlKey', 'shiftKey', 'metaKey'):
|
||||
evt[attr] = event[attr]
|
||||
self.iframe_wrapper.send_message('wheel_from_margin', evt=evt)
|
||||
|
||||
def forward_gesture(self, gesture):
|
||||
self.iframe_wrapper.send_message('gesture_from_margin', gesture=gesture)
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user