mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-09 03:04:10 -04:00
Viewer: Fix number of columns not auto-adjusting when font size is changed until a subsequent chapter change occurs
This commit is contained in:
parent
08e6d01928
commit
42d5db549d
@ -288,6 +288,7 @@ class ViewerBridge(Bridge):
|
||||
set_system_palette = to_js()
|
||||
show_search_result = to_js()
|
||||
prepare_for_close = to_js()
|
||||
viewer_font_size_changed = to_js()
|
||||
|
||||
|
||||
def apply_font_settings(page_or_view):
|
||||
@ -309,6 +310,8 @@ def apply_font_settings(page_or_view):
|
||||
sf = fs.get('standard_font') or 'serif'
|
||||
sf = getattr(s, {'serif': 'SerifFont', 'sans': 'SansSerifFont', 'mono': 'FixedFont'}[sf])
|
||||
s.setFontFamily(s.StandardFont, s.fontFamily(sf))
|
||||
old_minimum = s.fontSize(s.MinimumFontSize)
|
||||
old_base = s.fontSize(s.DefaultFontSize)
|
||||
mfs = fs.get('minimum_font_size')
|
||||
if mfs is None:
|
||||
s.resetFontSize(s.MinimumFontSize)
|
||||
@ -318,6 +321,10 @@ def apply_font_settings(page_or_view):
|
||||
if bfs is not None:
|
||||
s.setFontSize(s.DefaultFontSize, bfs)
|
||||
|
||||
font_size_changed = old_minimum != s.fontSize(s.MinimumFontSize) or old_base != s.fontSize(s.DefaultFontSize)
|
||||
if font_size_changed and hasattr(page_or_view, 'execute_when_ready'):
|
||||
page_or_view.execute_when_ready('viewer_font_size_changed')
|
||||
|
||||
return s
|
||||
|
||||
|
||||
@ -610,7 +617,7 @@ class WebView(RestartingWebEngineView):
|
||||
def set_session_data(self, key, val):
|
||||
if key == '*' and val is None:
|
||||
vprefs['session_data'] = {}
|
||||
apply_font_settings(self._page)
|
||||
apply_font_settings(self)
|
||||
self.paged_mode_changed.emit()
|
||||
self.standalone_misc_settings_changed.emit()
|
||||
elif key != '*':
|
||||
@ -618,7 +625,7 @@ class WebView(RestartingWebEngineView):
|
||||
sd[key] = val
|
||||
vprefs['session_data'] = sd
|
||||
if key in ('standalone_font_settings', 'base_font_size'):
|
||||
apply_font_settings(self._page)
|
||||
apply_font_settings(self)
|
||||
elif key == 'read_mode':
|
||||
self.paged_mode_changed.emit()
|
||||
elif key == 'standalone_misc_settings':
|
||||
|
@ -24,11 +24,11 @@ from read_book.mathjax import apply_mathjax
|
||||
from read_book.paged_mode import (
|
||||
anchor_funcs as paged_anchor_funcs,
|
||||
auto_scroll_action as paged_auto_scroll_action, calc_columns_per_screen,
|
||||
current_cfi, handle_gesture as paged_handle_gesture,
|
||||
handle_shortcut as paged_handle_shortcut, jump_to_cfi as paged_jump_to_cfi,
|
||||
layout as paged_layout, onwheel as paged_onwheel,
|
||||
prepare_for_resize as paged_prepare_for_resize, progress_frac,
|
||||
reset_paged_mode_globals, resize_done as paged_resize_done,
|
||||
will_columns_per_screen_change, current_cfi,
|
||||
handle_gesture as paged_handle_gesture, handle_shortcut as paged_handle_shortcut,
|
||||
jump_to_cfi as paged_jump_to_cfi, layout as paged_layout,
|
||||
onwheel as paged_onwheel, prepare_for_resize as paged_prepare_for_resize,
|
||||
progress_frac, reset_paged_mode_globals, resize_done as paged_resize_done,
|
||||
scroll_by_page as paged_scroll_by_page, scroll_to_elem,
|
||||
scroll_to_fraction as paged_scroll_to_fraction, snap_to_selection
|
||||
)
|
||||
@ -44,8 +44,9 @@ from read_book.shortcuts import (
|
||||
create_shortcut_map, keyevent_as_shortcut, shortcut_for_key_event
|
||||
)
|
||||
from read_book.toc import update_visible_toc_anchors
|
||||
from read_book.touch import (create_handlers as create_touch_handlers,
|
||||
reset_handlers as reset_touch_handlers)
|
||||
from read_book.touch import (
|
||||
create_handlers as create_touch_handlers, reset_handlers as reset_touch_handlers
|
||||
)
|
||||
from read_book.viewport import scroll_viewport
|
||||
from utils import (
|
||||
apply_cloned_selection, clone_selection, debounce, html_escape, is_ios
|
||||
@ -99,6 +100,7 @@ class IframeBoss:
|
||||
handlers = {
|
||||
'change_color_scheme': self.change_color_scheme,
|
||||
'change_font_size': self.change_font_size,
|
||||
'viewer_font_size_changed': self.viewer_font_size_changed,
|
||||
'change_scroll_speed': self.change_scroll_speed,
|
||||
'display': self.display,
|
||||
'find': self.find,
|
||||
@ -264,10 +266,29 @@ class IframeBoss:
|
||||
else:
|
||||
paged_scroll_by_page(backwards, data.all_pages_on_screen)
|
||||
|
||||
|
||||
def change_font_size(self, data):
|
||||
if data.base_font_size? and data.base_font_size != opts.base_font_size:
|
||||
opts.base_font_size = data.base_font_size
|
||||
apply_font_size()
|
||||
if not runtime.is_standalone_viewer:
|
||||
# in the standalone viewer this is a separate event as
|
||||
# apply_font_size() is a no-op
|
||||
self.relayout_on_font_size_change()
|
||||
|
||||
def viewer_font_size_changed(self, data):
|
||||
opts.base_font_size = data.base_font_size
|
||||
self.relayout_on_font_size_change()
|
||||
|
||||
def relayout_on_font_size_change(self):
|
||||
if current_layout_mode() is not 'flow' and will_columns_per_screen_change():
|
||||
self.do_layout(self.is_titlepage)
|
||||
if self.last_cfi:
|
||||
cfi = self.last_cfi[len('epubcfi(/'):-1].partition('/')[2]
|
||||
if cfi:
|
||||
paged_jump_to_cfi('/' + cfi)
|
||||
self.update_cfi()
|
||||
self.update_toc_position()
|
||||
|
||||
def change_scroll_speed(self, data):
|
||||
if data.lines_per_sec_auto?:
|
||||
|
@ -152,6 +152,10 @@ def calc_columns_per_screen():
|
||||
return cps
|
||||
|
||||
|
||||
def will_columns_per_screen_change():
|
||||
return calc_columns_per_screen() != cols_per_screen
|
||||
|
||||
|
||||
def layout(is_single_page, on_resize):
|
||||
nonlocal _in_paged_mode, col_width, col_and_gap, screen_height, gap, screen_width, is_full_screen_layout, cols_per_screen, number_of_cols
|
||||
body_style = window.getComputedStyle(document.body)
|
||||
|
@ -1066,6 +1066,9 @@ class View:
|
||||
def update_font_size(self):
|
||||
self.iframe_wrapper.send_message('change_font_size', base_font_size=get_session_data().get('base_font_size'))
|
||||
|
||||
def viewer_font_size_changed(self):
|
||||
self.iframe_wrapper.send_message('viewer_font_size_changed', base_font_size=get_session_data().get('base_font_size'))
|
||||
|
||||
def update_scroll_speed(self, amt):
|
||||
self.iframe_wrapper.send_message('change_scroll_speed', lines_per_sec_auto=change_scroll_speed(amt))
|
||||
|
||||
|
@ -300,6 +300,13 @@ def prepare_for_close():
|
||||
else:
|
||||
ui_operations.close_prep_finished(None)
|
||||
|
||||
|
||||
@from_python
|
||||
def viewer_font_size_changed():
|
||||
if view:
|
||||
view.viewer_font_size_changed()
|
||||
|
||||
|
||||
def onerror(msg, script_url, line_number, column_number, error_object):
|
||||
if not error_object:
|
||||
# cross domain error
|
||||
|
Loading…
x
Reference in New Issue
Block a user