Viewer: Add a setting under Preferences->Colors to control when the viewer will override all book colors or not.

This commit is contained in:
Kovid Goyal 2019-12-15 17:48:00 +05:30
parent e9b09b0066
commit 307680a019
No known key found for this signature in database
GPG Key ID: 06BC317B515ACE7C
4 changed files with 32 additions and 4 deletions

View File

@ -185,6 +185,7 @@ def set_action_button_visibility():
def create_colors_panel(container, apply_func, cancel_func): def create_colors_panel(container, apply_func, cancel_func):
container.appendChild(E.div(id=CONTAINER)) container.appendChild(E.div(id=CONTAINER))
container = container.lastChild container = container.lastChild
sd = get_session_data()
cs = resolve_color_scheme() cs = resolve_color_scheme()
container.dataset.bg = cs.background container.dataset.bg = cs.background
container.dataset.fg = cs.foreground container.dataset.fg = cs.foreground
@ -192,6 +193,19 @@ def create_colors_panel(container, apply_func, cancel_func):
container.appendChild(E.p(_('Choose a color scheme below'), style='margin:1ex 1em; padding: 1ex 0')) container.appendChild(E.p(_('Choose a color scheme below'), style='margin:1ex 1em; padding: 1ex 0'))
ul = E.ul(id=COLOR_LIST) ul = E.ul(id=COLOR_LIST)
container.appendChild(ul) container.appendChild(ul)
container.appendChild(E.div(
E.span(_('Override all book colors:') + '\xa0'),
E.label(E.input(type='radio', name='override_book_colors', value='never'), _('Never')),
' ',
E.label(E.input(type='radio', name='override_book_colors', value='dark'), _('In dark mode')),
' ',
E.label(E.input(type='radio', name='override_book_colors', value='always'), _('Always')),
style='margin:1ex 1em; padding: 1ex 0; white-space: pre-wrap'
))
try:
container.lastChild.querySelector(f'[name=override_book_colors][value={sd.get("override_book_colors")}]').checked = True
except:
container.lastChild.querySelector('[name=override_book_colors][value=never]').checked = True
create_color_buttons() create_color_buttons()
container.appendChild(E.div( container.appendChild(E.div(
@ -229,7 +243,11 @@ def commit_colors(onchange):
rcs = resolve_color_scheme(ccs) rcs = resolve_color_scheme(ccs)
c = get_container() c = get_container()
sd = get_session_data() sd = get_session_data()
prev_obc = sd.get('override_book_colors')
cur_obc = c.querySelector('[name=override_book_colors]:checked').value
sd.set('current_color_scheme', ccs) sd.set('current_color_scheme', ccs)
if rcs.foreground is not c.dataset.fg or rcs.background is not c.dataset.bg or c.dataset.link is not rcs.link: if cur_obc is not prev_obc:
sd.set('override_book_colors', cur_obc)
if rcs.foreground is not c.dataset.fg or rcs.background is not c.dataset.bg or c.dataset.link is not rcs.link or cur_obc is not prev_obc:
ui_operations.update_color_scheme() ui_operations.update_color_scheme()
onchange() onchange()

View File

@ -20,6 +20,7 @@ def update_settings(settings):
opts.bg_image_fade = settings.bg_image_fade or 'transparent' opts.bg_image_fade = settings.bg_image_fade or 'transparent'
opts.paged_wheel_scrolls_by_screen = v'!!settings.paged_wheel_scrolls_by_screen' opts.paged_wheel_scrolls_by_screen = v'!!settings.paged_wheel_scrolls_by_screen'
opts.is_dark_theme = v'!!settings.is_dark_theme' opts.is_dark_theme = v'!!settings.is_dark_theme'
opts.override_book_colors = settings.override_book_colors or 'never'
update_settings() update_settings()
@ -40,11 +41,17 @@ def apply_colors():
if not ss: if not ss:
ss = E.style(id='calibre-color-scheme-style-overrides', type='text/css') ss = E.style(id='calibre-color-scheme-style-overrides', type='text/css')
document.documentElement.appendChild(ss) document.documentElement.appendChild(ss)
text = ''
if opts.override_book_colors is not 'never':
text = 'body'
if opts.override_book_colors is 'dark':
text += '.calibre-viewer-dark-colors'
text += f' * {{ color: {opts.color_scheme.foreground} !important; background-color: {opts.color_scheme.background} !important }}'
if opts.color_scheme.link: if opts.color_scheme.link:
c = opts.color_scheme.link c = opts.color_scheme.link
text = f':link, :link * {{ color: {c} !important }} :visited, :visited * {{ color: {c} !important }}' # we use the html > body form so that these selectors have higher
else: # priority than the override all selectors above
text = '' text += f'\nhtml > body :link, html > body :link * {{ color: {c} !important }} html > body :visited, html > body :visited * {{ color: {c} !important }}'
ss.textContent = text ss.textContent = text

View File

@ -691,6 +691,7 @@ class View:
'read_mode': sd.get('read_mode'), 'read_mode': sd.get('read_mode'),
'columns_per_screen': sd.get('columns_per_screen'), 'columns_per_screen': sd.get('columns_per_screen'),
'color_scheme': cs, 'color_scheme': cs,
'override_book_colors': sd.get('override_book_colors'),
'is_dark_theme': is_dark_theme, 'is_dark_theme': is_dark_theme,
'bg_image_fade': bg_image_fade, 'bg_image_fade': bg_image_fade,
'base_font_size': sd.get('base_font_size'), 'base_font_size': sd.get('base_font_size'),

View File

@ -39,6 +39,7 @@ defaults = {
'background_image_fade': 0, 'background_image_fade': 0,
'current_color_scheme': 'system', 'current_color_scheme': 'system',
'user_color_schemes': {}, 'user_color_schemes': {},
'override_book_colors': 'never',
'base_font_size': 16, 'base_font_size': 16,
'controls_help_shown_count': 0, 'controls_help_shown_count': 0,
'header': {}, 'header': {},
@ -68,6 +69,7 @@ is_local_setting = {
'background_image_style': True, 'background_image_style': True,
'background_image_fade': True, 'background_image_fade': True,
'current_color_scheme': True, 'current_color_scheme': True,
'override_book_colors': True,
'base_font_size': True, 'base_font_size': True,
'controls_help_shown_count': True, 'controls_help_shown_count': True,
'standalone_font_settings': True, 'standalone_font_settings': True,