From 57c6f22858dc2d545bab705a9b9308b3eac354de Mon Sep 17 00:00:00 2001 From: Jiang Jiang Date: Tue, 4 Oct 2011 14:52:13 +0200 Subject: [PATCH] Add font family alias resolving to QPA By default it doesn't do anything special, but for fontconfig font db it will do some tricks to convert alias like serif to actualy font family names like Times. Change-Id: I73058d187a5422e6f93bc1b728cecdc0250d5e1e Reviewed-on: http://codereview.qt-project.org/5984 Reviewed-by: Qt Sanity Bot Reviewed-by: Pierre Rossi --- src/gui/text/qfontdatabase.cpp | 2 +- src/gui/text/qfontdatabase_qpa.cpp | 5 +++++ src/gui/text/qplatformfontdatabase_qpa.cpp | 11 +++++++++++ src/gui/text/qplatformfontdatabase_qpa.h | 1 + .../fontconfig/qfontconfigdatabase.cpp | 18 ++++++++++++++++++ .../fontconfig/qfontconfigdatabase_p.h | 1 + 6 files changed, 37 insertions(+), 1 deletion(-) 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