summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFlorian Bruhin <me@the-compiler.org>2020-11-24 13:46:39 +0100
committerFlorian Bruhin <me@the-compiler.org>2020-11-24 16:49:05 +0100
commit029ba192b6168e2bbe1b445c39ff126412177eb2 (patch)
tree1480bb3c86e60d978c15945a0cc58422b9fe2927
parent56b1d21d66204fb1c2507c6819ae731aab463f00 (diff)
downloadqutebrowser-029ba192b6168e2bbe1b445c39ff126412177eb2.tar.gz
qutebrowser-029ba192b6168e2bbe1b445c39ff126412177eb2.zip
Move getting default system font to configutils
For easier testability, as a preparation for #5663.
-rw-r--r--qutebrowser/config/configtypes.py45
-rw-r--r--qutebrowser/config/configutils.py53
2 files changed, 56 insertions, 42 deletions
diff --git a/qutebrowser/config/configtypes.py b/qutebrowser/config/configtypes.py
index 0b4ed4d3b..6328c3140 100644
--- a/qutebrowser/config/configtypes.py
+++ b/qutebrowser/config/configtypes.py
@@ -56,8 +56,8 @@ from typing import (Any, Callable, Dict as DictType, Iterable, Iterator,
import attr
import yaml
from PyQt5.QtCore import QUrl, Qt
-from PyQt5.QtGui import QColor, QFontDatabase
-from PyQt5.QtWidgets import QTabWidget, QTabBar, QApplication
+from PyQt5.QtGui import QColor
+from PyQt5.QtWidgets import QTabWidget, QTabBar
from PyQt5.QtNetwork import QNetworkProxy
from qutebrowser.misc import objects, debugcachestats
@@ -1159,50 +1159,11 @@ class FontBase(BaseType):
If the given family value (fonts.default_family in the config) is
unset, a system-specific default monospace font is used.
-
- Note that (at least) three ways of getting the default monospace font
- exist:
-
- 1) f = QFont()
- f.setStyleHint(QFont.Monospace)
- print(f.defaultFamily())
-
- 2) f = QFont()
- f.setStyleHint(QFont.TypeWriter)
- print(f.defaultFamily())
-
- 3) f = QFontDatabase.systemFont(QFontDatabase.FixedFont)
- print(f.family())
-
- They yield different results depending on the OS:
-
- QFont.Monospace | QFont.TypeWriter | QFontDatabase
- ------------------------------------------------------
- Windows: Courier New | Courier New | Courier New
- Linux: DejaVu Sans Mono | DejaVu Sans Mono | monospace
- macOS: Menlo | American Typewriter | Monaco
-
- Test script: https://p.cmpl.cc/d4dfe573
-
- On Linux, it seems like both actually resolve to the same font.
-
- On macOS, "American Typewriter" looks like it indeed tries to imitate a
- typewriter, so it's not really a suitable UI font.
-
- Looking at those Wikipedia articles:
-
- https://en.wikipedia.org/wiki/Monaco_(typeface)
- https://en.wikipedia.org/wiki/Menlo_(typeface)
-
- the "right" choice isn't really obvious. Thus, let's go for the
- QFontDatabase approach here, since it's by far the simplest one.
"""
if default_family:
families = configutils.FontFamilies(default_family)
else:
- assert QApplication.instance() is not None
- font = QFontDatabase.systemFont(QFontDatabase.FixedFont)
- families = configutils.FontFamilies([font.family()])
+ families = configutils.FontFamilies.from_system_default()
cls.default_family = families.to_str(quote=True)
cls.default_size = default_size
diff --git a/qutebrowser/config/configutils.py b/qutebrowser/config/configutils.py
index 1d98db3e7..b4eb004c2 100644
--- a/qutebrowser/config/configutils.py
+++ b/qutebrowser/config/configutils.py
@@ -29,6 +29,8 @@ from typing import (
MutableMapping)
from PyQt5.QtCore import QUrl
+from PyQt5.QtGui import QFontDatabase
+from PyQt5.QtWidgets import QApplication
from qutebrowser.utils import utils, urlmatch, usertypes, qtutils
from qutebrowser.config import configexc
@@ -296,6 +298,57 @@ class FontFamilies:
return ', '.join(families)
@classmethod
+ def from_system_default(
+ cls,
+ font_type: QFontDatabase.SystemFont = QFontDatabase.FixedFont,
+ ) -> 'FontFamilies':
+ """Get a FontFamilies object for the default system font.
+
+ By default, the monospace font is returned, though via the "font_type" argument,
+ other types can be requested as well.
+
+ Note that (at least) three ways of getting the default monospace font
+ exist:
+
+ 1) f = QFont()
+ f.setStyleHint(QFont.Monospace)
+ print(f.defaultFamily())
+
+ 2) f = QFont()
+ f.setStyleHint(QFont.TypeWriter)
+ print(f.defaultFamily())
+
+ 3) f = QFontDatabase.systemFont(QFontDatabase.FixedFont)
+ print(f.family())
+
+ They yield different results depending on the OS:
+
+ QFont.Monospace | QFont.TypeWriter | QFontDatabase
+ ------------------------------------------------------
+ Windows: Courier New | Courier New | Courier New
+ Linux: DejaVu Sans Mono | DejaVu Sans Mono | monospace
+ macOS: Menlo | American Typewriter | Monaco
+
+ Test script: https://p.cmpl.cc/d4dfe573
+
+ On Linux, it seems like both actually resolve to the same font.
+
+ On macOS, "American Typewriter" looks like it indeed tries to imitate a
+ typewriter, so it's not really a suitable UI font.
+
+ Looking at those Wikipedia articles:
+
+ https://en.wikipedia.org/wiki/Monaco_(typeface)
+ https://en.wikipedia.org/wiki/Menlo_(typeface)
+
+ the "right" choice isn't really obvious. Thus, let's go for the
+ QFontDatabase approach here, since it's by far the simplest one.
+ """
+ assert QApplication.instance() is not None
+ font = QFontDatabase.systemFont(font_type)
+ return cls([font.family()])
+
+ @classmethod
def from_str(cls, family_str: str) -> 'FontFamilies':
"""Parse a CSS-like string of font families."""
families = []