Edit book: In dark mode, make the preview panel also dark. Fixes #1888071 [[Enhancement] Make Editor file preview background color customizable](https://bugs.launchpad.net/calibre/+bug/1888071)

This commit is contained in:
Kovid Goyal
2020-07-29 23:10:23 +05:30
parent c11e2176f6
commit ff086a69bb
3 changed files with 108 additions and 7 deletions
+6 -6
View File
@@ -9,23 +9,23 @@ from calibre.constants import dark_link_color
dark_link_color = QColor(dark_link_color)
dark_color = QColor(45,45,45)
dark_text_color = QColor('#eee')
def dark_palette():
p = QPalette()
dark_color = QColor(45,45,45)
disabled_color = QColor(127,127,127)
text_color = QColor('#eee')
p.setColor(p.Window, dark_color)
p.setColor(p.WindowText, text_color)
p.setColor(p.WindowText, dark_text_color)
p.setColor(p.Base, QColor(18,18,18))
p.setColor(p.AlternateBase, dark_color)
p.setColor(p.ToolTipBase, dark_color)
p.setColor(p.ToolTipText, text_color)
p.setColor(p.Text, text_color)
p.setColor(p.ToolTipText, dark_text_color)
p.setColor(p.Text, dark_text_color)
p.setColor(p.Disabled, p.Text, disabled_color)
p.setColor(p.Button, dark_color)
p.setColor(p.ButtonText, text_color)
p.setColor(p.ButtonText, dark_text_color)
p.setColor(p.Disabled, p.ButtonText, disabled_color)
p.setColor(p.BrightText, Qt.red)
p.setColor(p.Link, dark_link_color)
+38 -1
View File
@@ -3,6 +3,7 @@
# License: GPLv3 Copyright: 2015, Kovid Goyal <kovid at kovidgoyal.net>
from __future__ import absolute_import, division, print_function, unicode_literals
import json
import textwrap
import time
from collections import defaultdict
@@ -24,7 +25,8 @@ from calibre.constants import (
)
from calibre.ebooks.oeb.base import OEB_DOCS, XHTML_MIME, serialize
from calibre.ebooks.oeb.polish.parsing import parse
from calibre.gui2 import NO_URL_FORMATTING, error_dialog, open_url
from calibre.gui2 import NO_URL_FORMATTING, error_dialog, is_dark_theme, open_url
from calibre.gui2.palette import dark_color, dark_text_color
from calibre.gui2.tweak_book import TOP, actions, current_container, editors, tprefs
from calibre.gui2.tweak_book.file_list import OpenWithHandler
from calibre.gui2.viewer.web_view import handle_mathjax_request, send_reply
@@ -243,10 +245,37 @@ def create_profile():
compile_editor()
js = P('editor.js', data=True, allow_user_override=False)
cparser = P('csscolorparser.js', data=True, allow_user_override=False)
dark_mode_css = P('dark_mode.css', data=True, allow_user_override=False).decode('utf-8')
insert_scripts(ans,
create_script('csscolorparser.js', cparser),
create_script('editor.js', js),
create_script('dark-mode.js', '''
(function() {if (%s) {
var dark_bg = "%s", dark_fg = "%s", css = %s;
function apply_css() {
var style = document.createElement('style');
style.textContent = css;
document.documentElement.appendChild(style);
}
function apply_dark_mode(event) {
if (document.documentElement) {
document.documentElement.style.backgroundColor = dark_bg;
document.documentElement.style.color = dark_fg;
}
if (document.body) {
document.body.style.backgroundColor = dark_bg;
document.body.style.color = dark_fg;
}
}
apply_css();
apply_dark_mode();
document.addEventListener("DOMContentLoaded", apply_dark_mode);
} })();
''' % (
'true' if is_dark_theme() else 'false', dark_color.name(), dark_text_color.name(), json.dumps(dark_mode_css)),
injection_point=QWebEngineScript.DocumentCreation)
)
url_handler = UrlSchemeHandler(ans)
ans.installUrlSchemeHandler(QByteArray(FAKE_PROTOCOL.encode('ascii')), url_handler)
@@ -443,7 +472,9 @@ class Preview(QWidget):
self.view._page.bridge.request_sync.connect(self.request_sync)
self.view._page.bridge.request_split.connect(self.request_split)
self.view._page.bridge.live_css_data.connect(self.live_css_data)
self.view._page.bridge.bridge_ready.connect(self.on_bridge_ready)
self.view._page.loadFinished.connect(self.load_finished)
self.view._page.loadStarted.connect(self.load_started)
self.view.render_process_restarted.connect(self.render_process_restarted)
self.pending_go_to_anchor = None
self.inspector = self.view.inspector
@@ -649,6 +680,12 @@ class Preview(QWidget):
def stop_split(self):
actions['split-in-preview'].setChecked(False)
def load_started(self):
pass
def on_bridge_ready(self):
pass
def load_finished(self, ok):
if self.pending_go_to_anchor:
self.view._page.go_to_anchor(self.pending_go_to_anchor)