mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-09 03:04:10 -04:00
Viewer: Change the default color scheme to "System" which matches the colors used by the rest of calibre/the operating system
Also means that if you switch color schemes while the viewer is running, the viewer will follow along automatically.
This commit is contained in:
parent
c46a5f8127
commit
0dc03ed11e
@ -269,6 +269,7 @@ class ViewerBridge(Bridge):
|
|||||||
background_image_changed = to_js()
|
background_image_changed = to_js()
|
||||||
goto_frac = to_js()
|
goto_frac = to_js()
|
||||||
trigger_shortcut = to_js()
|
trigger_shortcut = to_js()
|
||||||
|
set_system_palette = to_js()
|
||||||
|
|
||||||
|
|
||||||
def apply_font_settings(page_or_view):
|
def apply_font_settings(page_or_view):
|
||||||
@ -384,6 +385,15 @@ class Inspector(QWidget):
|
|||||||
return QSize(600, 1200)
|
return QSize(600, 1200)
|
||||||
|
|
||||||
|
|
||||||
|
def system_colors():
|
||||||
|
pal = QApplication.instance().palette()
|
||||||
|
return {
|
||||||
|
'background': pal.color(pal.Base).name(),
|
||||||
|
'foreground': pal.color(pal.Text).name(),
|
||||||
|
'link': pal.color(pal.Link).name(),
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
class WebView(RestartingWebEngineView):
|
class WebView(RestartingWebEngineView):
|
||||||
|
|
||||||
cfi_changed = pyqtSignal(object)
|
cfi_changed = pyqtSignal(object)
|
||||||
@ -417,6 +427,7 @@ class WebView(RestartingWebEngineView):
|
|||||||
self.dead_renderer_error_shown = False
|
self.dead_renderer_error_shown = False
|
||||||
self.render_process_failed.connect(self.render_process_died)
|
self.render_process_failed.connect(self.render_process_died)
|
||||||
w = QApplication.instance().desktop().availableGeometry(self).width()
|
w = QApplication.instance().desktop().availableGeometry(self).width()
|
||||||
|
QApplication.instance().palette_changed.connect(self.palette_changed)
|
||||||
self.show_home_page_on_ready = True
|
self.show_home_page_on_ready = True
|
||||||
self._size_hint = QSize(int(w/3), int(w/2))
|
self._size_hint = QSize(int(w/3), int(w/2))
|
||||||
self._page = WebPage(self)
|
self._page = WebPage(self)
|
||||||
@ -508,9 +519,15 @@ class WebView(RestartingWebEngineView):
|
|||||||
def on_bridge_ready(self):
|
def on_bridge_ready(self):
|
||||||
f = QApplication.instance().font()
|
f = QApplication.instance().font()
|
||||||
fi = QFontInfo(f)
|
fi = QFontInfo(f)
|
||||||
|
ui_data = {
|
||||||
|
'all_font_families': QFontDatabase().families(),
|
||||||
|
'ui_font_family': f.family(),
|
||||||
|
'ui_font_sz': '{}px'.format(fi.pixelSize()),
|
||||||
|
'show_home_page_on_ready': self.show_home_page_on_ready,
|
||||||
|
'system_colors': system_colors(),
|
||||||
|
}
|
||||||
self.bridge.create_view(
|
self.bridge.create_view(
|
||||||
vprefs['session_data'], vprefs['local_storage'], QFontDatabase().families(), field_metadata.all_metadata(),
|
vprefs['session_data'], vprefs['local_storage'], field_metadata.all_metadata(), ui_data)
|
||||||
f.family(), '{}px'.format(fi.pixelSize()), self.show_home_page_on_ready)
|
|
||||||
for func, args in iteritems(self.pending_bridge_ready_actions):
|
for func, args in iteritems(self.pending_bridge_ready_actions):
|
||||||
getattr(self.bridge, func)(*args)
|
getattr(self.bridge, func)(*args)
|
||||||
|
|
||||||
@ -592,3 +609,6 @@ class WebView(RestartingWebEngineView):
|
|||||||
|
|
||||||
def trigger_shortcut(self, which):
|
def trigger_shortcut(self, which):
|
||||||
self.execute_when_ready('trigger_shortcut', which)
|
self.execute_when_ready('trigger_shortcut', which)
|
||||||
|
|
||||||
|
def palette_changed(self):
|
||||||
|
self.execute_when_ready('set_system_palette', system_colors())
|
||||||
|
@ -48,17 +48,28 @@ def set_toc_anchor_map(val):
|
|||||||
toc_anchor_map.value = val
|
toc_anchor_map.value = val
|
||||||
|
|
||||||
default_color_schemes = {
|
default_color_schemes = {
|
||||||
|
'system':{'foreground':'#000000', 'background':'#ffffff', 'name':_('System')},
|
||||||
'white':{'foreground':'#000000', 'background':'#ffffff', 'name':_('White')},
|
'white':{'foreground':'#000000', 'background':'#ffffff', 'name':_('White')},
|
||||||
'black':{'foreground':'#ffffff', 'background':'#000000', 'link': '#4f81bd', 'name':_('Black')},
|
'black':{'foreground':'#ffffff', 'background':'#000000', 'link': '#4f81bd', 'name':_('Black')},
|
||||||
'sepia-light':{'foreground':'#39322B', 'background':'#F6F3E9', 'name':_('Sepia light')},
|
'sepia-light':{'foreground':'#39322B', 'background':'#F6F3E9', 'name':_('Sepia light')},
|
||||||
'sepia-dark': {'background':'#39322B', 'foreground':'#F6F3E9', 'link': '#4f81bd', 'name':_('Sepia dark')},
|
'sepia-dark': {'background':'#39322B', 'foreground':'#F6F3E9', 'link': '#4f81bd', 'name':_('Sepia dark')},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
def set_system_colors(spec):
|
||||||
|
c = default_color_schemes.system
|
||||||
|
c.foreground = spec.foreground
|
||||||
|
c.background = spec.background
|
||||||
|
c.link = spec.link
|
||||||
|
|
||||||
register_callback(def():
|
register_callback(def():
|
||||||
# Ensure the color scheme names are translated
|
# Ensure the color scheme names are translated
|
||||||
for key in default_color_schemes:
|
for key in default_color_schemes:
|
||||||
scheme = default_color_schemes[key]
|
scheme = default_color_schemes[key]
|
||||||
scheme.name = gt(scheme.name)
|
scheme.name = gt(scheme.name)
|
||||||
|
# set the system colors if in dark mode
|
||||||
|
if window.matchMedia and window.matchMedia('(prefers-color-scheme: dark)').matches:
|
||||||
|
set_system_colors({'background': '#111', 'foreground': '#ddd', 'link': '#6cb4ee'})
|
||||||
)
|
)
|
||||||
|
|
||||||
runtime = {
|
runtime = {
|
||||||
|
@ -37,7 +37,7 @@ defaults = {
|
|||||||
'background_image': None,
|
'background_image': None,
|
||||||
'background_image_style': 'scaled',
|
'background_image_style': 'scaled',
|
||||||
'background_image_fade': 0,
|
'background_image_fade': 0,
|
||||||
'current_color_scheme': 'white',
|
'current_color_scheme': 'system',
|
||||||
'user_color_schemes': {},
|
'user_color_schemes': {},
|
||||||
'base_font_size': 16,
|
'base_font_size': 16,
|
||||||
'controls_help_shown_count': 0,
|
'controls_help_shown_count': 0,
|
||||||
|
@ -16,7 +16,7 @@ from modals import create_modal_container
|
|||||||
from qt import from_python, to_python
|
from qt import from_python, to_python
|
||||||
from read_book.db import new_book
|
from read_book.db import new_book
|
||||||
from read_book.footnotes import main as footnotes_main
|
from read_book.footnotes import main as footnotes_main
|
||||||
from read_book.globals import runtime, ui_operations
|
from read_book.globals import runtime, ui_operations, set_system_colors
|
||||||
from read_book.iframe import main as iframe_main
|
from read_book.iframe import main as iframe_main
|
||||||
from read_book.shortcuts import add_standalone_viewer_shortcuts
|
from read_book.shortcuts import add_standalone_viewer_shortcuts
|
||||||
from read_book.view import View
|
from read_book.view import View
|
||||||
@ -214,19 +214,27 @@ def create_session_data(prefs, local_storage_data):
|
|||||||
|
|
||||||
|
|
||||||
@from_python
|
@from_python
|
||||||
def create_view(prefs, local_storage, all_font_families, field_metadata, ui_font_family, ui_font_sz, show_home_page_on_ready):
|
def create_view(prefs, local_storage, field_metadata, ui_data):
|
||||||
nonlocal view
|
nonlocal view
|
||||||
runtime.all_font_families = all_font_families
|
set_system_colors(ui_data.system_colors)
|
||||||
|
runtime.all_font_families = ui_data.all_font_families
|
||||||
library_data.field_metadata = field_metadata
|
library_data.field_metadata = field_metadata
|
||||||
document.documentElement.style.fontFamily = f'"{ui_font_family}", sans-serif'
|
document.documentElement.style.fontFamily = f'"{ui_data.ui_font_family}", sans-serif'
|
||||||
document.documentElement.style.fontSize = ui_font_sz
|
document.documentElement.style.fontSize = ui_data.ui_font_sz
|
||||||
if view is None:
|
if view is None:
|
||||||
create_session_data(prefs, local_storage)
|
create_session_data(prefs, local_storage)
|
||||||
view = View(document.getElementById('view'))
|
view = View(document.getElementById('view'))
|
||||||
if show_home_page_on_ready:
|
if ui_data.show_home_page_on_ready:
|
||||||
view.overlay.open_book(False)
|
view.overlay.open_book(False)
|
||||||
|
|
||||||
|
|
||||||
|
@from_python
|
||||||
|
def set_system_palette(system_colors):
|
||||||
|
set_system_colors(system_colors)
|
||||||
|
if view:
|
||||||
|
view.update_color_scheme()
|
||||||
|
|
||||||
|
|
||||||
@from_python
|
@from_python
|
||||||
def show_home_page():
|
def show_home_page():
|
||||||
view.overlay.open_book(False)
|
view.overlay.open_book(False)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user