diff options
author | Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@qt.io> | 2020-01-31 09:58:10 +0100 |
---|---|---|
committer | Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@qt.io> | 2020-03-06 08:27:36 +0100 |
commit | 8bdbb7f2267516905531f719902168c036329646 (patch) | |
tree | c252d8e9eefbc8ae054bbf613638159fd8532b7c /src/platformsupport/fontdatabases/fontconfig/qfontconfigdatabase.cpp | |
parent | a9caec4a927c5966409e1e0828a4b341fc865441 (diff) |
Enabler: Store more properties of application fonts
The family name of a font is ambiguous and without additional
information there is no way to separate one font from another
inside that family.
In order to make it possible to expose more info about application
fonts from FontLoader in Qt Quick, we need to store them in the font
database.
Task-number: QTBUG-68829
Change-Id: I931e1c2c004437ac0a21d4d88e55d176de676f34
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
Diffstat (limited to 'src/platformsupport/fontdatabases/fontconfig/qfontconfigdatabase.cpp')
-rw-r--r-- | src/platformsupport/fontdatabases/fontconfig/qfontconfigdatabase.cpp | 31 |
1 files changed, 28 insertions, 3 deletions
diff --git a/src/platformsupport/fontdatabases/fontconfig/qfontconfigdatabase.cpp b/src/platformsupport/fontdatabases/fontconfig/qfontconfigdatabase.cpp index af49ad6407..49bcbf7e78 100644 --- a/src/platformsupport/fontdatabases/fontconfig/qfontconfigdatabase.cpp +++ b/src/platformsupport/fontdatabases/fontconfig/qfontconfigdatabase.cpp @@ -392,7 +392,7 @@ static inline bool requiresOpenType(int writingSystem) || writingSystem == QFontDatabase::Khmer || writingSystem == QFontDatabase::Nko); } -static void populateFromPattern(FcPattern *pattern) +static void populateFromPattern(FcPattern *pattern, QFontDatabasePrivate::ApplicationFont *applicationFont = nullptr) { QString familyName; QString familyNameLang; @@ -502,6 +502,18 @@ static void populateFromPattern(FcPattern *pattern) // Note: stretch should really be an int but registerFont incorrectly uses an enum QFont::Stretch stretch = QFont::Stretch(stretchFromFcWidth(width_value)); QString styleName = style_value ? QString::fromUtf8((const char *) style_value) : QString(); + + if (applicationFont != nullptr) { + QFontDatabasePrivate::ApplicationFont::Properties properties; + properties.familyName = familyName; + properties.styleName = styleName; + properties.weight = weight; + properties.style = style; + properties.stretch = stretch; + + applicationFont->properties.append(properties); + } + QPlatformFontDatabase::registerFont(familyName,styleName,QLatin1String((const char *)foundry_value),weight,style,stretch,antialias,scalable,pixel_size,fixedPitch,writingSystems,fontFile); // qDebug() << familyName << (const char *)foundry_value << weight << style << &writingSystems << scalable << true << pixel_size; @@ -523,6 +535,16 @@ static void populateFromPattern(FcPattern *pattern) altFamilyNameLang = familyNameLang; if (familyNameLang == altFamilyNameLang && altStyleName != styleName) { + if (applicationFont != nullptr) { + QFontDatabasePrivate::ApplicationFont::Properties properties; + properties.familyName = altFamilyName; + properties.styleName = altStyleName; + properties.weight = weight; + properties.style = style; + properties.stretch = stretch; + + applicationFont->properties.append(properties); + } FontFile *altFontFile = new FontFile(*fontFile); QPlatformFontDatabase::registerFont(altFamilyName, altStyleName, QLatin1String((const char *)foundry_value),weight,style,stretch,antialias,scalable,pixel_size,fixedPitch,writingSystems,altFontFile); } else { @@ -827,10 +849,13 @@ static FcPattern *queryFont(const FcChar8 *file, const QByteArray &data, int id, #endif } -QStringList QFontconfigDatabase::addApplicationFont(const QByteArray &fontData, const QString &fileName) +QStringList QFontconfigDatabase::addApplicationFont(const QByteArray &fontData, const QString &fileName, QFontDatabasePrivate::ApplicationFont *applicationFont) { QStringList families; + if (applicationFont != nullptr) + applicationFont->properties.clear(); + FcFontSet *set = FcConfigGetFonts(nullptr, FcSetApplication); if (!set) { FcConfigAppFontAddFile(nullptr, (const FcChar8 *)":/non-existent"); @@ -855,7 +880,7 @@ QStringList QFontconfigDatabase::addApplicationFont(const QByteArray &fontData, QString family = QString::fromUtf8(reinterpret_cast<const char *>(fam)); families << family; } - populateFromPattern(pattern); + populateFromPattern(pattern, applicationFont); FcFontSetAdd(set, pattern); |