From c1884695ab3033eab46fbc312a8027e22b81eff3 Mon Sep 17 00:00:00 2001 From: Vladimir Belyavsky Date: Wed, 22 Nov 2023 11:41:43 +0300 Subject: [PATCH] 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 (cherry picked from commit f8ce5d76a8baf7f625e1ffd976a0c2b94c47e755) Reviewed-by: Qt Cherry-pick Bot (cherry picked from commit 8bcacb3f5bd31e6ffcded2e5a07cb0de56553616) --- .../material/qquickmaterialtheme.cpp | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/src/quickcontrols/material/qquickmaterialtheme.cpp b/src/quickcontrols/material/qquickmaterialtheme.cpp index ebf88cf844..ff7c9ce6ab 100644 --- a/src/quickcontrols/material/qquickmaterialtheme.cpp +++ b/src/quickcontrols/material/qquickmaterialtheme.cpp @@ -6,7 +6,7 @@ #include #include -#include +#include #include QT_BEGIN_NAMESPACE @@ -21,17 +21,15 @@ void QQuickMaterialTheme::initialize(QQuickTheme *theme) QFont menuItemFont; QFont editorFont; - QFont font; - font.setFamilies(QStringList{QLatin1String("Roboto")}); - QString family = QFontInfo(font).family(); - - if (family != QLatin1String("Roboto")) { - font.setFamilies(QStringList{QLatin1String("Noto")}); - family = QFontInfo(font).family(); + auto defaultFontFamily = QLatin1String("Roboto"); + if (!QFontDatabase::hasFamily(defaultFontFamily)) { + defaultFontFamily = QLatin1String("Noto"); // fallback + if (!QFontDatabase::hasFamily(defaultFontFamily)) + defaultFontFamily = {}; } - if (family == QLatin1String("Roboto") || family == QLatin1String("Noto")) { - const QStringList families{family}; + if (!defaultFontFamily.isEmpty()) { + const QStringList families{defaultFontFamily}; systemFont.setFamilies(families); buttonFont.setFamilies(families); toolTipFont.setFamilies(families);