mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-09 03:04:10 -04:00
Do not reload book when changing color scheme
This commit is contained in:
parent
28f8b0aa7b
commit
e6bea96ff5
@ -45,6 +45,7 @@ class IframeBoss:
|
||||
'scroll_to_anchor': self.on_scroll_to_anchor,
|
||||
'next_screen': self.on_next_screen,
|
||||
'change_font_size': self.change_font_size,
|
||||
'change_color_scheme': self.change_color_scheme,
|
||||
}
|
||||
self.last_window_ypos = 0
|
||||
|
||||
@ -148,6 +149,11 @@ class IframeBoss:
|
||||
opts.base_font_size = data.base_font_size
|
||||
self.apply_font_size()
|
||||
|
||||
def change_color_scheme(self, data):
|
||||
if data.color_scheme and data.color_scheme.foreground and data.color_scheme.background:
|
||||
opts.color_scheme = data.color_scheme
|
||||
self.apply_colors()
|
||||
|
||||
def content_loaded(self):
|
||||
document.documentElement.style.overflow = 'hidden'
|
||||
# document.body.appendChild(
|
||||
|
@ -5,7 +5,7 @@ from __python__ import hash_literals, bound_methods
|
||||
from gettext import gettext as _
|
||||
from dom import svgicon, set_css, add_extra_css, build_rule, clear, unique_id
|
||||
from elementmaker import E
|
||||
from book_list.globals import get_session_data
|
||||
from book_list.globals import get_session_data, get_boss
|
||||
from read_book.globals import default_color_schemes
|
||||
from modals import error_dialog
|
||||
from widgets import create_button
|
||||
@ -34,6 +34,20 @@ add_extra_css(def():
|
||||
def get_container():
|
||||
return document.getElementById(CONTAINER)
|
||||
|
||||
def resolve_color_scheme(current_color_scheme):
|
||||
sd = get_session_data()
|
||||
cs = current_color_scheme or sd.get('current_color_scheme') or 'white'
|
||||
ucs = sd.get('user_color_schemes')
|
||||
if default_color_schemes[cs]:
|
||||
ans = default_color_schemes[cs]
|
||||
elif ucs[cs] and ucs[cs].foreground and ucs[cs].background:
|
||||
ans = ucs[cs]
|
||||
else:
|
||||
for sn in default_color_schemes:
|
||||
ans = default_color_schemes[sn]
|
||||
break
|
||||
return ans
|
||||
|
||||
def change_current_color(ev):
|
||||
ul = ev.currentTarget.parentNode
|
||||
for li in ul.childNodes:
|
||||
@ -152,6 +166,9 @@ def set_action_button_visibility():
|
||||
def create_colors_panel(container):
|
||||
container.appendChild(E.div(id=CONTAINER))
|
||||
container = container.lastChild
|
||||
cs = resolve_color_scheme()
|
||||
container.dataset.bg = cs.background
|
||||
container.dataset.fg = cs.foreground
|
||||
container.appendChild(E.p(_('Choose a color scheme below'), style='margin:1ex 1em; padding: 1ex 0'))
|
||||
ul = E.ul(id=COLOR_LIST)
|
||||
container.appendChild(ul)
|
||||
@ -179,8 +196,9 @@ develop = create_colors_panel
|
||||
|
||||
def commit_colors(onchange):
|
||||
ccs = current_color_scheme()
|
||||
rcs = resolve_color_scheme(ccs)
|
||||
c = get_container()
|
||||
if rcs.foreground is not c.dataset.fg or rcs.background is not c.dataset.bg:
|
||||
sd = get_session_data()
|
||||
if sd.get('current_color_scheme') is not ccs:
|
||||
sd.set('current_color_scheme', ccs)
|
||||
onchange()
|
||||
|
||||
get_boss().read_ui.update_color_scheme()
|
||||
|
@ -113,6 +113,9 @@ class ReadUI:
|
||||
def update_font_size(self):
|
||||
self.view.update_font_size()
|
||||
|
||||
def update_color_scheme(self):
|
||||
self.view.update_color_scheme()
|
||||
|
||||
@property
|
||||
def url_data(self):
|
||||
ans = {'book_id':self.base_url_data.book_id, 'fmt': self.base_url_data.fmt}
|
||||
|
@ -6,9 +6,10 @@ from book_list.globals import get_session_data, get_boss
|
||||
from dom import set_css, add_extra_css, build_rule, svgicon
|
||||
from elementmaker import E
|
||||
from gettext import gettext as _
|
||||
from read_book.globals import messenger, iframe_id, default_color_schemes
|
||||
from read_book.globals import messenger, iframe_id
|
||||
from read_book.resources import load_resources
|
||||
from read_book.overlay import Overlay
|
||||
from read_book.prefs.colors import resolve_color_scheme
|
||||
from book_list.theme import get_color
|
||||
from utils import parse_url_params, username_key
|
||||
|
||||
@ -178,17 +179,7 @@ class View:
|
||||
self.ui.show_error((data.title or _('There was an error processing the book')), data.msg, data.details)
|
||||
|
||||
def get_color_scheme(self, apply_to_margins):
|
||||
sd = get_session_data()
|
||||
cs = sd.get('current_color_scheme') or 'white'
|
||||
ucs = sd.get('user_color_schemes')
|
||||
if default_color_schemes[cs]:
|
||||
ans = default_color_schemes[cs]
|
||||
elif ucs[cs] and ucs[cs].foreground and ucs[cs].background:
|
||||
ans = ucs[cs]
|
||||
else:
|
||||
for sn in default_color_schemes:
|
||||
ans = default_color_schemes[sn]
|
||||
break
|
||||
ans = resolve_color_scheme()
|
||||
if apply_to_margins:
|
||||
for which in 'left top right bottom'.split(' '):
|
||||
s = document.getElementById('book-{}-margin'.format(which)).style
|
||||
@ -324,3 +315,7 @@ class View:
|
||||
|
||||
def update_font_size(self):
|
||||
self.send_message('change_font_size', base_font_size=get_session_data().get('base_font_size'))
|
||||
|
||||
def update_color_scheme(self):
|
||||
cs = self.get_color_scheme(True)
|
||||
self.send_message('change_color_scheme', color_scheme=cs)
|
||||
|
Loading…
x
Reference in New Issue
Block a user