mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-06-23 15:30:45 -04:00
Viewer: Fix occasional skipping over a chapter when flick scrolling in flow mode
This commit is contained in:
parent
5bf261244d
commit
7b22d7f51a
@ -5,7 +5,7 @@ from __python__ import bound_methods, hash_literals
|
|||||||
from select import word_at_point
|
from select import word_at_point
|
||||||
|
|
||||||
from dom import set_css
|
from dom import set_css
|
||||||
from read_book.globals import get_boss
|
from read_book.globals import current_spine_item, get_boss
|
||||||
from read_book.viewport import scroll_viewport
|
from read_book.viewport import scroll_viewport
|
||||||
from utils import document_height, viewport_to_document
|
from utils import document_height, viewport_to_document
|
||||||
|
|
||||||
@ -53,10 +53,19 @@ def report_human_scroll(amt):
|
|||||||
clear_small_scrolls()
|
clear_small_scrolls()
|
||||||
|
|
||||||
|
|
||||||
|
last_change_spine_item_request = {}
|
||||||
|
|
||||||
|
|
||||||
def _check_for_scroll_end(func, obj, args, report):
|
def _check_for_scroll_end(func, obj, args, report):
|
||||||
before = window.pageYOffset
|
before = window.pageYOffset
|
||||||
func.apply(obj, args)
|
func.apply(obj, args)
|
||||||
if window.pageYOffset is before:
|
if window.pageYOffset is before:
|
||||||
|
now = Date.now()
|
||||||
|
csi = current_spine_item()
|
||||||
|
if last_change_spine_item_request.name is csi.name and now - last_change_spine_item_request.at < 2000:
|
||||||
|
return False
|
||||||
|
last_change_spine_item_request.name = csi.name
|
||||||
|
last_change_spine_item_request.at = now
|
||||||
get_boss().send_message('next_spine_item', previous=args[0] < 0)
|
get_boss().send_message('next_spine_item', previous=args[0] < 0)
|
||||||
return False
|
return False
|
||||||
if report:
|
if report:
|
||||||
@ -105,8 +114,7 @@ smooth_y_data = {'last_event_at':0, 'up': False, 'timer':None, 'source':'wheel',
|
|||||||
|
|
||||||
def do_y_scroll():
|
def do_y_scroll():
|
||||||
dy = (-1 if smooth_y_data.up else 1) * smooth_y_data.pixels_per_ms * smooth_y_data.scroll_interval
|
dy = (-1 if smooth_y_data.up else 1) * smooth_y_data.pixels_per_ms * smooth_y_data.scroll_interval
|
||||||
if Math.abs(dy) >= 1:
|
if Math.abs(dy) >= 1 and scroll_by(dy):
|
||||||
scroll_by(dy)
|
|
||||||
if Date.now() - smooth_y_data.last_event_at < smooth_y_data.stop_scrolling_after:
|
if Date.now() - smooth_y_data.last_event_at < smooth_y_data.stop_scrolling_after:
|
||||||
smooth_y_data.timer = setTimeout(do_y_scroll, smooth_y_data.scroll_interval)
|
smooth_y_data.timer = setTimeout(do_y_scroll, smooth_y_data.scroll_interval)
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user