diff --git a/src/gui/text/qfontdatabase.cpp b/src/gui/text/qfontdatabase.cpp index fa67dc1a8a..680f63edb3 100644 --- a/src/gui/text/qfontdatabase.cpp +++ b/src/gui/text/qfontdatabase.cpp @@ -1131,7 +1131,7 @@ QT_BEGIN_INCLUDE_NAMESPACE # include "qfontdatabase_s60.cpp" #endif QT_END_INCLUDE_NAMESPACE -#if !defined(Q_WS_X11) +#if !defined(Q_WS_X11) && !defined(Q_WS_QPA) QString QFontDatabase::resolveFontFamilyAlias(const QString &family) { return family; diff --git a/src/gui/text/qfontdatabase_qpa.cpp b/src/gui/text/qfontdatabase_qpa.cpp index fbee077ba7..4cd47da6b7 100644 --- a/src/gui/text/qfontdatabase_qpa.cpp +++ b/src/gui/text/qfontdatabase_qpa.cpp @@ -377,4 +377,9 @@ void QFontDatabase::load(const QFontPrivate *d, int script) } } +QString QFontDatabase::resolveFontFamilyAlias(const QString &family) +{ + return QGuiApplicationPrivate::platformIntegration()->fontDatabase()->resolveFontFamilyAlias(family); +} + QT_END_NAMESPACE diff --git a/src/gui/text/qplatformfontdatabase_qpa.cpp b/src/gui/text/qplatformfontdatabase_qpa.cpp index cedf481898..89bc05985d 100644 --- a/src/gui/text/qplatformfontdatabase_qpa.cpp +++ b/src/gui/text/qplatformfontdatabase_qpa.cpp @@ -372,6 +372,17 @@ QHash QPlatformFontDatabase::defaultFonts() const return QHash(); } +/*! + Resolve alias to actual font family names. + + \since 5.0 + */ + +QString QPlatformFontDatabase::resolveFontFamilyAlias(const QString &family) const +{ + return family; +} + /*! \class QPlatformFontDatabase \brief The QPlatformFontDatabase class makes it possible to customize how fonts diff --git a/src/gui/text/qplatformfontdatabase_qpa.h b/src/gui/text/qplatformfontdatabase_qpa.h index ad94b108da..901d8c2e6e 100644 --- a/src/gui/text/qplatformfontdatabase_qpa.h +++ b/src/gui/text/qplatformfontdatabase_qpa.h @@ -99,6 +99,7 @@ public: virtual QFont defaultFont() const; virtual QHash defaultFonts() const; + virtual QString resolveFontFamilyAlias(const QString &family) const; //callback static void registerQPF2Font(const QByteArray &dataArray, void *handle); diff --git a/src/platformsupport/fontdatabases/fontconfig/qfontconfigdatabase.cpp b/src/platformsupport/fontdatabases/fontconfig/qfontconfigdatabase.cpp index e566cee4f4..3f4aeb2d4a 100644 --- a/src/platformsupport/fontdatabases/fontconfig/qfontconfigdatabase.cpp +++ b/src/platformsupport/fontdatabases/fontconfig/qfontconfigdatabase.cpp @@ -658,3 +658,21 @@ QStringList QFontconfigDatabase::addApplicationFont(const QByteArray &fontData, return families; } +QString QFontconfigDatabase::resolveFontFamilyAlias(const QString &family) const +{ + FcPattern *pattern = FcPatternCreate(); + if (!pattern) + return family; + + QByteArray cs = family.toUtf8(); + FcPatternAddString(pattern, FC_FAMILY, (const FcChar8 *) cs.constData()); + FcConfigSubstitute(0, pattern, FcMatchPattern); + FcDefaultSubstitute(pattern); + + FcChar8 *familyAfterSubstitution; + FcPatternGetString(pattern, FC_FAMILY, 0, &familyAfterSubstitution); + QString resolved = QString::fromUtf8((const char *) familyAfterSubstitution); + FcPatternDestroy(pattern); + + return resolved; +} diff --git a/src/platformsupport/fontdatabases/fontconfig/qfontconfigdatabase_p.h b/src/platformsupport/fontdatabases/fontconfig/qfontconfigdatabase_p.h index eec510722a..c6983e1a8b 100644 --- a/src/platformsupport/fontdatabases/fontconfig/qfontconfigdatabase_p.h +++ b/src/platformsupport/fontdatabases/fontconfig/qfontconfigdatabase_p.h @@ -52,6 +52,7 @@ public: QFontEngine *fontEngine(const QFontDef &fontDef, QUnicodeTables::Script script, void *handle); QStringList fallbacksForFamily(const QString family, const QFont::Style &style, const QFont::StyleHint &styleHint, const QUnicodeTables::Script &script) const; QStringList addApplicationFont(const QByteArray &fontData, const QString &fileName); + QString resolveFontFamilyAlias(const QString &family) const; }; #endif // QFONTCONFIGDATABASE_H