mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-09 03:04:10 -04:00
Viewer: Allow drag scrolling in paged mode as well
This commit is contained in:
parent
07d63bd3af
commit
23fb259c42
@ -22,11 +22,12 @@ from read_book.extract import get_elements
|
|||||||
from read_book.find import reset_find_caches, select_search_result
|
from read_book.find import reset_find_caches, select_search_result
|
||||||
from read_book.flow_mode import (
|
from read_book.flow_mode import (
|
||||||
anchor_funcs as flow_anchor_funcs, auto_scroll_action as flow_auto_scroll_action,
|
anchor_funcs as flow_anchor_funcs, auto_scroll_action as flow_auto_scroll_action,
|
||||||
cancel_drag_scroll, ensure_selection_visible, flow_onwheel,
|
cancel_drag_scroll as cancel_drag_scroll_flow, ensure_selection_visible,
|
||||||
flow_to_scroll_fraction, handle_gesture as flow_handle_gesture,
|
flow_onwheel, flow_to_scroll_fraction, handle_gesture as flow_handle_gesture,
|
||||||
handle_shortcut as flow_handle_shortcut, layout as flow_layout,
|
handle_shortcut as flow_handle_shortcut, layout as flow_layout,
|
||||||
scroll_by_page as flow_scroll_by_page,
|
scroll_by_page as flow_scroll_by_page,
|
||||||
scroll_to_extend_annotation as flow_annotation_scroll, start_drag_scroll
|
scroll_to_extend_annotation as flow_annotation_scroll,
|
||||||
|
start_drag_scroll as start_drag_scroll_flow
|
||||||
)
|
)
|
||||||
from read_book.footnotes import is_footnote_link
|
from read_book.footnotes import is_footnote_link
|
||||||
from read_book.globals import (
|
from read_book.globals import (
|
||||||
@ -38,7 +39,8 @@ from read_book.mathjax import apply_mathjax
|
|||||||
from read_book.paged_mode import (
|
from read_book.paged_mode import (
|
||||||
anchor_funcs as paged_anchor_funcs,
|
anchor_funcs as paged_anchor_funcs,
|
||||||
auto_scroll_action as paged_auto_scroll_action, calc_columns_per_screen,
|
auto_scroll_action as paged_auto_scroll_action, calc_columns_per_screen,
|
||||||
current_cfi, get_columns_per_screen_data, handle_gesture as paged_handle_gesture,
|
cancel_drag_scroll as cancel_drag_scroll_paged, current_cfi,
|
||||||
|
get_columns_per_screen_data, handle_gesture as paged_handle_gesture,
|
||||||
handle_shortcut as paged_handle_shortcut, jump_to_cfi as paged_jump_to_cfi,
|
handle_shortcut as paged_handle_shortcut, jump_to_cfi as paged_jump_to_cfi,
|
||||||
layout as paged_layout, onwheel as paged_onwheel,
|
layout as paged_layout, onwheel as paged_onwheel,
|
||||||
prepare_for_resize as paged_prepare_for_resize, progress_frac,
|
prepare_for_resize as paged_prepare_for_resize, progress_frac,
|
||||||
@ -46,7 +48,7 @@ from read_book.paged_mode import (
|
|||||||
scroll_by_page as paged_scroll_by_page, scroll_to_elem,
|
scroll_by_page as paged_scroll_by_page, scroll_to_elem,
|
||||||
scroll_to_extend_annotation as paged_annotation_scroll,
|
scroll_to_extend_annotation as paged_annotation_scroll,
|
||||||
scroll_to_fraction as paged_scroll_to_fraction, snap_to_selection,
|
scroll_to_fraction as paged_scroll_to_fraction, snap_to_selection,
|
||||||
will_columns_per_screen_change
|
start_drag_scroll as start_drag_scroll_paged, will_columns_per_screen_change
|
||||||
)
|
)
|
||||||
from read_book.referencing import (
|
from read_book.referencing import (
|
||||||
elem_for_ref, end_reference_mode, start_reference_mode
|
elem_for_ref, end_reference_mode, start_reference_mode
|
||||||
@ -75,6 +77,11 @@ def layout_style():
|
|||||||
return 'scrolling' if current_layout_mode() is 'flow' else 'paginated'
|
return 'scrolling' if current_layout_mode() is 'flow' else 'paginated'
|
||||||
|
|
||||||
|
|
||||||
|
def cancel_drag_scroll():
|
||||||
|
cancel_drag_scroll_flow()
|
||||||
|
cancel_drag_scroll_paged()
|
||||||
|
|
||||||
|
|
||||||
class EPUBReadingSystem:
|
class EPUBReadingSystem:
|
||||||
|
|
||||||
@property
|
@property
|
||||||
@ -231,6 +238,7 @@ class IframeBoss:
|
|||||||
self.auto_scroll_action = flow_auto_scroll_action
|
self.auto_scroll_action = flow_auto_scroll_action
|
||||||
self.scroll_to_extend_annotation = flow_annotation_scroll
|
self.scroll_to_extend_annotation = flow_annotation_scroll
|
||||||
self.ensure_selection_visible = ensure_selection_visible
|
self.ensure_selection_visible = ensure_selection_visible
|
||||||
|
self.start_drag_scroll = start_drag_scroll_flow
|
||||||
paged_auto_scroll_action('stop')
|
paged_auto_scroll_action('stop')
|
||||||
else:
|
else:
|
||||||
self.do_layout = paged_layout
|
self.do_layout = paged_layout
|
||||||
@ -243,6 +251,7 @@ class IframeBoss:
|
|||||||
self.auto_scroll_action = paged_auto_scroll_action
|
self.auto_scroll_action = paged_auto_scroll_action
|
||||||
self.scroll_to_extend_annotation = paged_annotation_scroll
|
self.scroll_to_extend_annotation = paged_annotation_scroll
|
||||||
self.ensure_selection_visible = snap_to_selection
|
self.ensure_selection_visible = snap_to_selection
|
||||||
|
self.start_drag_scroll = start_drag_scroll_paged
|
||||||
flow_auto_scroll_action('stop')
|
flow_auto_scroll_action('stop')
|
||||||
update_settings(data.settings)
|
update_settings(data.settings)
|
||||||
self.keyboard_shortcut_map = create_shortcut_map(data.settings.keyboard_shortcuts)
|
self.keyboard_shortcut_map = create_shortcut_map(data.settings.keyboard_shortcuts)
|
||||||
@ -544,7 +553,7 @@ class IframeBoss:
|
|||||||
def onmousemove(self, evt):
|
def onmousemove(self, evt):
|
||||||
if evt.buttons is not 1:
|
if evt.buttons is not 1:
|
||||||
return
|
return
|
||||||
if 0 <= evt.clientY <= window.innerHeight or current_layout_mode() is not 'flow':
|
if 0 <= evt.clientY <= window.innerHeight:
|
||||||
cancel_drag_scroll()
|
cancel_drag_scroll()
|
||||||
return
|
return
|
||||||
sel = window.getSelection()
|
sel = window.getSelection()
|
||||||
@ -552,7 +561,7 @@ class IframeBoss:
|
|||||||
cancel_drag_scroll()
|
cancel_drag_scroll()
|
||||||
return
|
return
|
||||||
delta = evt.clientY if evt.clientY < 0 else (evt.clientY - window.innerHeight)
|
delta = evt.clientY if evt.clientY < 0 else (evt.clientY - window.innerHeight)
|
||||||
start_drag_scroll(delta)
|
self.start_drag_scroll(delta)
|
||||||
|
|
||||||
def onmouseup(self, evt):
|
def onmouseup(self, evt):
|
||||||
cancel_drag_scroll()
|
cancel_drag_scroll()
|
||||||
|
@ -746,3 +746,45 @@ def auto_scroll_action(action):
|
|||||||
' scrolling'), is_non_critical=True
|
' scrolling'), is_non_critical=True
|
||||||
)
|
)
|
||||||
return False
|
return False
|
||||||
|
|
||||||
|
|
||||||
|
class DragScroller:
|
||||||
|
|
||||||
|
INTERVAL = 500
|
||||||
|
|
||||||
|
def __init__(self):
|
||||||
|
self.backward = False
|
||||||
|
self.timer_id = None
|
||||||
|
|
||||||
|
def is_running(self):
|
||||||
|
return self.timer_id is not None
|
||||||
|
|
||||||
|
def start(self, backward):
|
||||||
|
if not self.is_running() or backward is not self.backward:
|
||||||
|
self.stop()
|
||||||
|
self.backward = backward
|
||||||
|
self.timer_id = window.setTimeout(self.do_one_page_turn.bind(self), self.INTERVAL)
|
||||||
|
|
||||||
|
def do_one_page_turn(self):
|
||||||
|
pos = previous_col_location() if self.backward else next_col_location()
|
||||||
|
if pos >= 0:
|
||||||
|
scroll_to_xpos(pos)
|
||||||
|
self.timer_id = window.setTimeout(self.do_one_page_turn.bind(self), self.INTERVAL * 2)
|
||||||
|
else:
|
||||||
|
self.stop()
|
||||||
|
|
||||||
|
def stop(self):
|
||||||
|
if self.timer_id is not None:
|
||||||
|
window.clearTimeout(self.timer_id)
|
||||||
|
self.timer_id = None
|
||||||
|
|
||||||
|
|
||||||
|
drag_scroller = DragScroller()
|
||||||
|
|
||||||
|
|
||||||
|
def cancel_drag_scroll():
|
||||||
|
drag_scroller.stop()
|
||||||
|
|
||||||
|
|
||||||
|
def start_drag_scroll(delta):
|
||||||
|
drag_scroller.start(delta < 0)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user