diff --git a/src/pyj/read_book/flow_mode.pyj b/src/pyj/read_book/flow_mode.pyj index 36d4431ee2..a54178ee5b 100644 --- a/src/pyj/read_book/flow_mode.pyj +++ b/src/pyj/read_book/flow_mode.pyj @@ -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 diff --git a/src/pyj/read_book/iframe.pyj b/src/pyj/read_book/iframe.pyj index 7d3150462f..72d3593905 100644 --- a/src/pyj/read_book/iframe.pyj +++ b/src/pyj/read_book/iframe.pyj @@ -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: diff --git a/src/pyj/read_book/view.pyj b/src/pyj/read_book/view.pyj index 9d310dbf14..cb0a7143c2 100644 --- a/src/pyj/read_book/view.pyj +++ b/src/pyj/read_book/view.pyj @@ -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)