Respect fixed pitch request when font family is not available

In particular, if you have a <pre> tag in your HTML, this will
become a QFont with family "Courier New" and fixedPitch==true.
On Android, there's no "Courier New" font, and since the
style hint is AnyStyle, we will just return Roboto, which is
a proportional font.

Note that this exactly matches the condition when fetching the
fallback families for the font in the loadEngine() function,
which was introduced by 06568ff89c48dee8aab278b8b0538c331aa84595
in Qt 4.

[ChangeLog][Text] Respect QFont::fixedPitch() for fallbacks
when font family cannot be matched.

Task-number: QTBUG-36083
Change-Id: I64787c547dc492b9dd3c49f1edf0d9626d198260
Reviewed-by: Jørgen Lind <jorgen.lind@digia.com>
Reviewed-by: Konstantin Ritt <ritt.ks@gmail.com>
This commit is contained in:
Eskil Abrahamsen Blomfeldt 2014-05-12 08:28:59 +02:00 committed by The Qt Project
parent 0a0cc6afc8
commit 3cf9621fa0

View File

@ -2501,10 +2501,14 @@ QFontDatabase::findFont(int script, const QFontPrivate *fp,
if (!engine) { if (!engine) {
if (!request.family.isEmpty()) { if (!request.family.isEmpty()) {
QFont::StyleHint styleHint = QFont::StyleHint(request.styleHint);
if (styleHint == QFont::AnyStyle && request.fixedPitch)
styleHint = QFont::TypeWriter;
QStringList fallbacks = request.fallBackFamilies QStringList fallbacks = request.fallBackFamilies
+ fallbackFamilies(request.family, + fallbackFamilies(request.family,
QFont::Style(request.style), QFont::Style(request.style),
QFont::StyleHint(request.styleHint), styleHint,
QChar::Script(script)); QChar::Script(script));
if (script > QChar::Script_Common) if (script > QChar::Script_Common)
fallbacks += QString(); // Find the first font matching the specified script. fallbacks += QString(); // Find the first font matching the specified script.