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()
|
set_system_palette = to_js()
|
||||||
show_search_result = to_js()
|
show_search_result = to_js()
|
||||||
prepare_for_close = to_js()
|
prepare_for_close = to_js()
|
||||||
|
viewer_font_size_changed = to_js()
|
||||||
|
|
||||||
|
|
||||||
def apply_font_settings(page_or_view):
|
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 = fs.get('standard_font') or 'serif'
|
||||||
sf = getattr(s, {'serif': 'SerifFont', 'sans': 'SansSerifFont', 'mono': 'FixedFont'}[sf])
|
sf = getattr(s, {'serif': 'SerifFont', 'sans': 'SansSerifFont', 'mono': 'FixedFont'}[sf])
|
||||||
s.setFontFamily(s.StandardFont, s.fontFamily(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')
|
mfs = fs.get('minimum_font_size')
|
||||||
if mfs is None:
|
if mfs is None:
|
||||||
s.resetFontSize(s.MinimumFontSize)
|
s.resetFontSize(s.MinimumFontSize)
|
||||||
@ -318,6 +321,10 @@ def apply_font_settings(page_or_view):
|
|||||||
if bfs is not None:
|
if bfs is not None:
|
||||||
s.setFontSize(s.DefaultFontSize, bfs)
|
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
|
return s
|
||||||
|
|
||||||
|
|
||||||
@ -610,7 +617,7 @@ class WebView(RestartingWebEngineView):
|
|||||||
def set_session_data(self, key, val):
|
def set_session_data(self, key, val):
|
||||||
if key == '*' and val is None:
|
if key == '*' and val is None:
|
||||||
vprefs['session_data'] = {}
|
vprefs['session_data'] = {}
|
||||||
apply_font_settings(self._page)
|
apply_font_settings(self)
|
||||||
self.paged_mode_changed.emit()
|
self.paged_mode_changed.emit()
|
||||||
self.standalone_misc_settings_changed.emit()
|
self.standalone_misc_settings_changed.emit()
|
||||||
elif key != '*':
|
elif key != '*':
|
||||||
@ -618,7 +625,7 @@ class WebView(RestartingWebEngineView):
|
|||||||
sd[key] = val
|
sd[key] = val
|
||||||
vprefs['session_data'] = sd
|
vprefs['session_data'] = sd
|
||||||
if key in ('standalone_font_settings', 'base_font_size'):
|
if key in ('standalone_font_settings', 'base_font_size'):
|
||||||
apply_font_settings(self._page)
|
apply_font_settings(self)
|
||||||
elif key == 'read_mode':
|
elif key == 'read_mode':
|
||||||
self.paged_mode_changed.emit()
|
self.paged_mode_changed.emit()
|
||||||
elif key == 'standalone_misc_settings':
|
elif key == 'standalone_misc_settings':
|
||||||
|
@ -24,11 +24,11 @@ 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, handle_gesture as paged_handle_gesture,
|
will_columns_per_screen_change, current_cfi,
|
||||||
handle_shortcut as paged_handle_shortcut, jump_to_cfi as paged_jump_to_cfi,
|
handle_gesture as paged_handle_gesture, handle_shortcut as paged_handle_shortcut,
|
||||||
layout as paged_layout, onwheel as paged_onwheel,
|
jump_to_cfi as paged_jump_to_cfi, layout as paged_layout,
|
||||||
prepare_for_resize as paged_prepare_for_resize, progress_frac,
|
onwheel as paged_onwheel, prepare_for_resize as paged_prepare_for_resize,
|
||||||
reset_paged_mode_globals, resize_done as paged_resize_done,
|
progress_frac, reset_paged_mode_globals, resize_done as paged_resize_done,
|
||||||
scroll_by_page as paged_scroll_by_page, scroll_to_elem,
|
scroll_by_page as paged_scroll_by_page, scroll_to_elem,
|
||||||
scroll_to_fraction as paged_scroll_to_fraction, snap_to_selection
|
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
|
create_shortcut_map, keyevent_as_shortcut, shortcut_for_key_event
|
||||||
)
|
)
|
||||||
from read_book.toc import update_visible_toc_anchors
|
from read_book.toc import update_visible_toc_anchors
|
||||||
from read_book.touch import (create_handlers as create_touch_handlers,
|
from read_book.touch import (
|
||||||
reset_handlers as reset_touch_handlers)
|
create_handlers as create_touch_handlers, reset_handlers as reset_touch_handlers
|
||||||
|
)
|
||||||
from read_book.viewport import scroll_viewport
|
from read_book.viewport import scroll_viewport
|
||||||
from utils import (
|
from utils import (
|
||||||
apply_cloned_selection, clone_selection, debounce, html_escape, is_ios
|
apply_cloned_selection, clone_selection, debounce, html_escape, is_ios
|
||||||
@ -99,6 +100,7 @@ class IframeBoss:
|
|||||||
handlers = {
|
handlers = {
|
||||||
'change_color_scheme': self.change_color_scheme,
|
'change_color_scheme': self.change_color_scheme,
|
||||||
'change_font_size': self.change_font_size,
|
'change_font_size': self.change_font_size,
|
||||||
|
'viewer_font_size_changed': self.viewer_font_size_changed,
|
||||||
'change_scroll_speed': self.change_scroll_speed,
|
'change_scroll_speed': self.change_scroll_speed,
|
||||||
'display': self.display,
|
'display': self.display,
|
||||||
'find': self.find,
|
'find': self.find,
|
||||||
@ -264,10 +266,29 @@ class IframeBoss:
|
|||||||
else:
|
else:
|
||||||
paged_scroll_by_page(backwards, data.all_pages_on_screen)
|
paged_scroll_by_page(backwards, data.all_pages_on_screen)
|
||||||
|
|
||||||
|
|
||||||
def change_font_size(self, data):
|
def change_font_size(self, data):
|
||||||
if data.base_font_size? and data.base_font_size != opts.base_font_size:
|
if data.base_font_size? and data.base_font_size != opts.base_font_size:
|
||||||
opts.base_font_size = data.base_font_size
|
opts.base_font_size = data.base_font_size
|
||||||
apply_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):
|
def change_scroll_speed(self, data):
|
||||||
if data.lines_per_sec_auto?:
|
if data.lines_per_sec_auto?:
|
||||||
|
@ -152,6 +152,10 @@ def calc_columns_per_screen():
|
|||||||
return cps
|
return cps
|
||||||
|
|
||||||
|
|
||||||
|
def will_columns_per_screen_change():
|
||||||
|
return calc_columns_per_screen() != cols_per_screen
|
||||||
|
|
||||||
|
|
||||||
def layout(is_single_page, on_resize):
|
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
|
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)
|
body_style = window.getComputedStyle(document.body)
|
||||||
|
@ -1066,6 +1066,9 @@ class View:
|
|||||||
def update_font_size(self):
|
def update_font_size(self):
|
||||||
self.iframe_wrapper.send_message('change_font_size', base_font_size=get_session_data().get('base_font_size'))
|
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):
|
def update_scroll_speed(self, amt):
|
||||||
self.iframe_wrapper.send_message('change_scroll_speed', lines_per_sec_auto=change_scroll_speed(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:
|
else:
|
||||||
ui_operations.close_prep_finished(None)
|
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):
|
def onerror(msg, script_url, line_number, column_number, error_object):
|
||||||
if not error_object:
|
if not error_object:
|
||||||
# cross domain error
|
# cross domain error
|
||||||
|
Loading…
x
Reference in New Issue
Block a user