Fix font settings for Editor preview not working

This commit is contained in:
Kovid Goyal 2019-09-09 11:20:55 +05:30
parent a6097fab4a
commit b6c3253fb9
No known key found for this signature in database
GPG Key ID: 06BC317B515ACE7C
3 changed files with 28 additions and 13 deletions

View File

@ -31,9 +31,9 @@ d['dock_top_left'] = 'horizontal'
d['dock_top_right'] = 'horizontal' d['dock_top_right'] = 'horizontal'
d['dock_bottom_left'] = 'horizontal' d['dock_bottom_left'] = 'horizontal'
d['dock_bottom_right'] = 'horizontal' d['dock_bottom_right'] = 'horizontal'
d['preview_serif_family'] = 'Liberation Serif' d['engine_preview_serif_family'] = None
d['preview_sans_family'] = 'Liberation Sans' d['engine_preview_sans_family'] = None
d['preview_mono_family'] = 'Liberation Mono' d['engine_preview_mono_family'] = None
d['preview_standard_font_family'] = 'serif' d['preview_standard_font_family'] = 'serif'
d['preview_base_font_size'] = 18 d['preview_base_font_size'] = 18
d['preview_mono_font_size'] = 14 d['preview_mono_font_size'] = 14

View File

@ -7,6 +7,7 @@ __copyright__ = '2013, Kovid Goyal <kovid at kovidgoyal.net>'
import numbers import numbers
from operator import attrgetter, methodcaller from operator import attrgetter, methodcaller
from functools import partial
from collections import namedtuple from collections import namedtuple
from polyglot.builtins import ( from polyglot.builtins import (
iteritems, itervalues, map, unicode_type, range) iteritems, itervalues, map, unicode_type, range)
@ -19,6 +20,7 @@ from PyQt5.Qt import (
QCheckBox, pyqtSignal, QDoubleSpinBox, QComboBox, QLabel, QFont, QCheckBox, pyqtSignal, QDoubleSpinBox, QComboBox, QLabel, QFont,
QFontComboBox, QPushButton, QSizePolicy, QHBoxLayout, QGroupBox, QFontComboBox, QPushButton, QSizePolicy, QHBoxLayout, QGroupBox,
QToolButton, QVBoxLayout, QSpacerItem, QTimer) QToolButton, QVBoxLayout, QSpacerItem, QTimer)
from PyQt5.QtWebEngineWidgets import QWebEngineSettings
from calibre import prepare_string_for_xml from calibre import prepare_string_for_xml
from calibre.utils.localization import get_lang from calibre.utils.localization import get_lang
@ -342,17 +344,25 @@ class PreviewSettings(BasicSettings):
self.l = l = QFormLayout(self) self.l = l = QFormLayout(self)
self.setLayout(l) self.setLayout(l)
def family_getter(w): def default_font(which):
return unicode_type(w.currentFont().family()) s = QWebEngineSettings.defaultSettings()
which = getattr(s, {'serif': 'SerifFont', 'sans': 'SansSerifFont', 'mono': 'FixedFont'}[which])
return s.fontFamily(which)
def family_setter(w, val): def family_getter(which, w):
w.setCurrentFont(QFont(val)) 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')} families = {'serif':_('Serif text'), 'sans':_('Sans-serif text'), 'mono':_('Monospaced text')}
for fam in sorted(families): for fam in sorted(families):
text = families[fam] text = families[fam]
w = QFontComboBox(self) 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) l.addRow(_('Font family for &%s:') % text, w)
w = self.choices_widget('preview_standard_font_family', families, 'serif', 'serif') w = self.choices_widget('preview_standard_font_family', families, 'serif', 'serif')

View File

@ -652,8 +652,13 @@ class Preview(QWidget):
s.setFontSize(s.DefaultFixedFontSize, tprefs['preview_mono_font_size']) s.setFontSize(s.DefaultFixedFontSize, tprefs['preview_mono_font_size'])
s.setFontSize(s.MinimumLogicalFontSize, tprefs['preview_minimum_font_size']) s.setFontSize(s.MinimumLogicalFontSize, tprefs['preview_minimum_font_size'])
s.setFontSize(s.MinimumFontSize, 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'] sf, ssf, mf = tprefs['engine_preview_serif_family'], tprefs['engine_preview_sans_family'], tprefs['engine_preview_mono_family']
s.setFontFamily(s.StandardFont, {'serif':sf, 'sans':ssf, 'mono':mf, None:sf}[tprefs['preview_standard_font_family']]) if sf:
s.setFontFamily(s.SerifFont, sf) s.setFontFamily(s.SerifFont, sf)
s.setFontFamily(s.SansSerifFont, ssf) if ssf:
s.setFontFamily(s.FixedFont, mf) 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))