QQuickMaterialTheme: check if default font family is available

Explicitly check if "Roboto" font family is available before using
it as a default font family for Material style. If not - try fallback
to "Noto" font family. If both are unavailable, use default system font.
This prevents us from missing family fallback lookups, which can be slow.

Similar change 86b4f9f583e31f0db171a4320680902d83340468 was made also
for Imagine style.

Fixes: QTBUG-83155
Change-Id: I57b7837175dd2b7d5097fbc648da33bd5443f8d5
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
(cherry picked from commit f8ce5d76a8)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
(cherry picked from commit 8bcacb3f5b)
This commit is contained in:
Vladimir Belyavsky 2023-11-22 11:41:43 +03:00 committed by Qt Cherry-pick Bot
parent c488bae64d
commit c1884695ab
1 changed files with 8 additions and 10 deletions

View File

@ -6,7 +6,7 @@
#include <QtGui/qpa/qplatformdialoghelper.h> #include <QtGui/qpa/qplatformdialoghelper.h>
#include <QtGui/qfont.h> #include <QtGui/qfont.h>
#include <QtGui/qfontinfo.h> #include <QtGui/qfontdatabase.h>
#include <QtQuickTemplates2/private/qquicktheme_p.h> #include <QtQuickTemplates2/private/qquicktheme_p.h>
QT_BEGIN_NAMESPACE QT_BEGIN_NAMESPACE
@ -21,17 +21,15 @@ void QQuickMaterialTheme::initialize(QQuickTheme *theme)
QFont menuItemFont; QFont menuItemFont;
QFont editorFont; QFont editorFont;
QFont font; auto defaultFontFamily = QLatin1String("Roboto");
font.setFamilies(QStringList{QLatin1String("Roboto")}); if (!QFontDatabase::hasFamily(defaultFontFamily)) {
QString family = QFontInfo(font).family(); defaultFontFamily = QLatin1String("Noto"); // fallback
if (!QFontDatabase::hasFamily(defaultFontFamily))
if (family != QLatin1String("Roboto")) { defaultFontFamily = {};
font.setFamilies(QStringList{QLatin1String("Noto")});
family = QFontInfo(font).family();
} }
if (family == QLatin1String("Roboto") || family == QLatin1String("Noto")) { if (!defaultFontFamily.isEmpty()) {
const QStringList families{family}; const QStringList families{defaultFontFamily};
systemFont.setFamilies(families); systemFont.setFamilies(families);
buttonFont.setFamilies(families); buttonFont.setFamilies(families);
toolTipFont.setFamilies(families); toolTipFont.setFamilies(families);