From 7a92304040c375fe867f71c1b04bc3e6b2c32b6e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?M=C3=A5rten=20Nordheim?= Date: Mon, 17 Apr 2023 17:41:20 +0200 Subject: [PATCH] FontDatabase[win/freetype] implement population of aliases We rely on this function discovering extra fonts if we cannot find any or only find poor matches for our font request. Whether that be because we had only partially populated the fonts of a given family or because the user specified a font using a localized name. It's a copy-paste of the implementation in qwindowsfontdatabase Fixes: QTBUG-111854 Pick-to: 6.5 Change-Id: I0dd97b68d84417a26ce82a46f39804b36602ed67 Reviewed-by: Eskil Abrahamsen Blomfeldt --- src/gui/text/windows/qwindowsfontdatabase_ft.cpp | 15 +++++++++++++++ src/gui/text/windows/qwindowsfontdatabase_ft_p.h | 3 +++ 2 files changed, 18 insertions(+) diff --git a/src/gui/text/windows/qwindowsfontdatabase_ft.cpp b/src/gui/text/windows/qwindowsfontdatabase_ft.cpp index f30a39aeccb..e62f5e54b19 100644 --- a/src/gui/text/windows/qwindowsfontdatabase_ft.cpp +++ b/src/gui/text/windows/qwindowsfontdatabase_ft.cpp @@ -295,6 +295,21 @@ static int QT_WIN_CALLBACK storeFont(const LOGFONT *logFont, const TEXTMETRIC *t return 1; } +bool QWindowsFontDatabaseFT::populateFamilyAliases(const QString &missingFamily) +{ + Q_UNUSED(missingFamily); + + if (m_hasPopulatedAliases) + return false; + + QStringList families = QFontDatabase::families(); + for (const QString &family : families) + populateFamily(family); + m_hasPopulatedAliases = true; + + return true; +} + /* \brief Populates the font database using EnumFontFamiliesEx(). diff --git a/src/gui/text/windows/qwindowsfontdatabase_ft_p.h b/src/gui/text/windows/qwindowsfontdatabase_ft_p.h index b908cd54c67..381a7be4e78 100644 --- a/src/gui/text/windows/qwindowsfontdatabase_ft_p.h +++ b/src/gui/text/windows/qwindowsfontdatabase_ft_p.h @@ -25,6 +25,7 @@ class Q_GUI_EXPORT QWindowsFontDatabaseFT : public QFreeTypeFontDatabase { public: void populateFontDatabase() override; + bool populateFamilyAliases(const QString &familyName) override; void populateFamily(const QString &familyName) override; QFontEngine *fontEngine(const QFontDef &fontDef, void *handle) override; QFontEngine *fontEngine(const QByteArray &fontData, qreal pixelSize, @@ -36,6 +37,8 @@ public: QString fontDir() const override; QFont defaultFont() const override; + + bool m_hasPopulatedAliases = false; }; QT_END_NAMESPACE