From b6c3253fb96902d088af733978139b50b2c8e8b4 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Mon, 9 Sep 2019 11:20:55 +0530 Subject: [PATCH] Fix font settings for Editor preview not working --- src/calibre/gui2/tweak_book/__init__.py | 6 +++--- src/calibre/gui2/tweak_book/preferences.py | 20 +++++++++++++++----- src/calibre/gui2/tweak_book/preview.py | 15 ++++++++++----- 3 files changed, 28 insertions(+), 13 deletions(-) diff --git a/src/calibre/gui2/tweak_book/__init__.py b/src/calibre/gui2/tweak_book/__init__.py index 812f646985..65c7a6901c 100644 --- a/src/calibre/gui2/tweak_book/__init__.py +++ b/src/calibre/gui2/tweak_book/__init__.py @@ -31,9 +31,9 @@ d['dock_top_left'] = 'horizontal' d['dock_top_right'] = 'horizontal' d['dock_bottom_left'] = 'horizontal' d['dock_bottom_right'] = 'horizontal' -d['preview_serif_family'] = 'Liberation Serif' -d['preview_sans_family'] = 'Liberation Sans' -d['preview_mono_family'] = 'Liberation Mono' +d['engine_preview_serif_family'] = None +d['engine_preview_sans_family'] = None +d['engine_preview_mono_family'] = None d['preview_standard_font_family'] = 'serif' d['preview_base_font_size'] = 18 d['preview_mono_font_size'] = 14 diff --git a/src/calibre/gui2/tweak_book/preferences.py b/src/calibre/gui2/tweak_book/preferences.py index e49096da3d..27bf968cb6 100644 --- a/src/calibre/gui2/tweak_book/preferences.py +++ b/src/calibre/gui2/tweak_book/preferences.py @@ -7,6 +7,7 @@ __copyright__ = '2013, Kovid Goyal ' import numbers from operator import attrgetter, methodcaller +from functools import partial from collections import namedtuple from polyglot.builtins import ( iteritems, itervalues, map, unicode_type, range) @@ -19,6 +20,7 @@ from PyQt5.Qt import ( QCheckBox, pyqtSignal, QDoubleSpinBox, QComboBox, QLabel, QFont, QFontComboBox, QPushButton, QSizePolicy, QHBoxLayout, QGroupBox, QToolButton, QVBoxLayout, QSpacerItem, QTimer) +from PyQt5.QtWebEngineWidgets import QWebEngineSettings from calibre import prepare_string_for_xml from calibre.utils.localization import get_lang @@ -342,17 +344,25 @@ class PreviewSettings(BasicSettings): self.l = l = QFormLayout(self) self.setLayout(l) - def family_getter(w): - return unicode_type(w.currentFont().family()) + def default_font(which): + s = QWebEngineSettings.defaultSettings() + which = getattr(s, {'serif': 'SerifFont', 'sans': 'SansSerifFont', 'mono': 'FixedFont'}[which]) + return s.fontFamily(which) - def family_setter(w, val): - w.setCurrentFont(QFont(val)) + def family_getter(which, w): + ans = unicode_type(w.currentFont().family()) + if ans == default_font(which): + ans = None + return ans + + def family_setter(which, w, val): + w.setCurrentFont(QFont(val or default_font(which))) families = {'serif':_('Serif text'), 'sans':_('Sans-serif text'), 'mono':_('Monospaced text')} for fam in sorted(families): text = families[fam] w = QFontComboBox(self) - self('preview_%s_family' % fam, widget=w, getter=family_getter, setter=family_setter) + self('engine_preview_%s_family' % fam, widget=w, getter=partial(family_getter, fam), setter=partial(family_setter, fam)) l.addRow(_('Font family for &%s:') % text, w) w = self.choices_widget('preview_standard_font_family', families, 'serif', 'serif') diff --git a/src/calibre/gui2/tweak_book/preview.py b/src/calibre/gui2/tweak_book/preview.py index 061ef86379..839cf1be5b 100644 --- a/src/calibre/gui2/tweak_book/preview.py +++ b/src/calibre/gui2/tweak_book/preview.py @@ -652,8 +652,13 @@ class Preview(QWidget): s.setFontSize(s.DefaultFixedFontSize, tprefs['preview_mono_font_size']) s.setFontSize(s.MinimumLogicalFontSize, tprefs['preview_minimum_font_size']) s.setFontSize(s.MinimumFontSize, tprefs['preview_minimum_font_size']) - sf, ssf, mf = tprefs['preview_serif_family'], tprefs['preview_sans_family'], tprefs['preview_mono_family'] - s.setFontFamily(s.StandardFont, {'serif':sf, 'sans':ssf, 'mono':mf, None:sf}[tprefs['preview_standard_font_family']]) - s.setFontFamily(s.SerifFont, sf) - s.setFontFamily(s.SansSerifFont, ssf) - s.setFontFamily(s.FixedFont, mf) + sf, ssf, mf = tprefs['engine_preview_serif_family'], tprefs['engine_preview_sans_family'], tprefs['engine_preview_mono_family'] + if sf: + s.setFontFamily(s.SerifFont, sf) + if ssf: + s.setFontFamily(s.SansSerifFont, ssf) + if mf: + s.setFontFamily(s.FixedFont, mf) + stdfnt = tprefs['preview_standard_font_family'] or 'serif' + stdfnt = getattr(s, {'serif': 'SerifFont', 'sans': 'SansSerifFont', 'mono': 'FixedFont'}[stdfnt]) + s.setFontFamily(s.StandardFont, s.fontFamily(stdfnt))