diff options
Diffstat (limited to 'src/platformsupport/fontdatabases/fontconfig/qfontconfigdatabase.cpp')
-rw-r--r-- | src/platformsupport/fontdatabases/fontconfig/qfontconfigdatabase.cpp | 51 |
1 files changed, 15 insertions, 36 deletions
diff --git a/src/platformsupport/fontdatabases/fontconfig/qfontconfigdatabase.cpp b/src/platformsupport/fontdatabases/fontconfig/qfontconfigdatabase.cpp index d555ada95a..8c3ca2d229 100644 --- a/src/platformsupport/fontdatabases/fontconfig/qfontconfigdatabase.cpp +++ b/src/platformsupport/fontdatabases/fontconfig/qfontconfigdatabase.cpp @@ -43,8 +43,6 @@ #include "qfontenginemultifontconfig_p.h" #include <QtCore/QList> -#include <QtGui/private/qfont_p.h> - #include <QtCore/QElapsedTimer> #include <qpa/qplatformnativeinterface.h> @@ -53,27 +51,16 @@ #include <qpa/qplatformservices.h> #include <QtGui/private/qfontengine_ft_p.h> -#include <QtGui/private/qfontengine_p.h> #include <QtGui/private/qfontengine_qpa_p.h> #include <QtGui/private/qguiapplication_p.h> #include <QtGui/qguiapplication.h> -#include <ft2build.h> -#include FT_TRUETYPE_TABLES_H - #include <fontconfig/fontconfig.h> -#include FT_FREETYPE_H - #if FC_VERSION >= 20402 #include <fontconfig/fcfreetype.h> #endif -#define SimplifiedChineseCsbBit 18 -#define TraditionalChineseCsbBit 20 -#define JapaneseCsbBit 17 -#define KoreanCsbBit 21 - QT_BEGIN_NAMESPACE static inline bool requiresOpenType(int writingSystem) @@ -82,12 +69,6 @@ static inline bool requiresOpenType(int writingSystem) || writingSystem == QFontDatabase::Khmer || writingSystem == QFontDatabase::Nko); } -static inline bool scriptRequiresOpenType(int script) -{ - return ((script >= QChar::Script_Syriac && script <= QChar::Script_Sinhala) - || script == QChar::Script_Khmer || script == QChar::Script_Nko); -} - static int getFCWeight(int fc_weight) { int qtweight = QFont::Black; @@ -208,7 +189,7 @@ static const char *specialLanguages[] = { "srb", // SoraSompeng "doi" // Takri }; -enum { SpecialLanguageCount = sizeof(specialLanguages) / sizeof(const char *) }; +Q_STATIC_ASSERT(sizeof(specialLanguages) / sizeof(const char *) == QChar::ScriptCount); // this could become a list of all languages used for each writing // system, instead of using the single most common language. @@ -248,9 +229,9 @@ static const char *languageForWritingSystem[] = { "non", // Runic "man" // N'Ko }; -enum { LanguageCount = sizeof(languageForWritingSystem) / sizeof(const char *) }; - +Q_STATIC_ASSERT(sizeof(languageForWritingSystem) / sizeof(const char *) == QFontDatabase::WritingSystemsCount); +#if FC_VERSION >= 20297 // Newer FontConfig let's us sort out fonts that contain certain glyphs, but no // open type tables for is directly. Do this so we don't pick some strange // pseudo unicode font @@ -290,6 +271,8 @@ static const char *openType[] = { 0, // Runic "nko " // N'Ko }; +Q_STATIC_ASSERT(sizeof(openType) / sizeof(const char *) == QFontDatabase::WritingSystemsCount); +#endif static const char *getFcFamilyForStyleHint(const QFont::StyleHint style) { @@ -317,8 +300,6 @@ static const char *getFcFamilyForStyleHint(const QFont::StyleHint style) return stylehint; } -Q_GUI_EXPORT void qt_registerAliasToFontFamily(const QString &familyName, const QString &alias); - void QFontconfigDatabase::populateFontDatabase() { FcFontSet *fonts; @@ -395,12 +376,12 @@ void QFontconfigDatabase::populateFontDatabase() FcResult res = FcPatternGetLangSet(fonts->fonts[i], FC_LANG, 0, &langset); if (res == FcResultMatch) { bool hasLang = false; - for (int i = 1; i < LanguageCount; ++i) { - const FcChar8 *lang = (const FcChar8*) languageForWritingSystem[i]; + for (int j = 1; j < QFontDatabase::WritingSystemsCount; ++j) { + const FcChar8 *lang = (const FcChar8*) languageForWritingSystem[j]; if (lang) { FcLangResult langRes = FcLangSetHasLang(langset, lang); if (langRes != FcLangDifferentLang) { - writingSystems.setSupported(QFontDatabase::WritingSystem(i)); + writingSystems.setSupported(QFontDatabase::WritingSystem(j)); hasLang = true; } } @@ -415,9 +396,8 @@ void QFontconfigDatabase::populateFontDatabase() writingSystems.setSupported(QFontDatabase::Other); } - #if FC_VERSION >= 20297 - for (int j = 1; j < LanguageCount; ++j) { + for (int j = 1; j < QFontDatabase::WritingSystemsCount; ++j) { if (writingSystems.supported(QFontDatabase::WritingSystem(j)) && requiresOpenType(j) && openType[j]) { FcChar8 *cap; @@ -453,7 +433,7 @@ void QFontconfigDatabase::populateFontDatabase() // qDebug() << familyName << (const char *)foundry_value << weight << style << &writingSystems << scalable << true << pixel_size; for (int k = 1; FcPatternGetString(fonts->fonts[i], FC_FAMILY, k, &value) == FcResultMatch; ++k) - qt_registerAliasToFontFamily(familyName, QString::fromUtf8((const char *)value)); + QPlatformFontDatabase::registerAliasToFontFamily(familyName, QString::fromUtf8((const char *)value)); } FcFontSetDestroy (fonts); @@ -624,11 +604,10 @@ QFontEngine *QFontconfigDatabase::fontEngine(const QFontDef &f, QChar::Script sc if (engine->invalid()) { delete engine; engine = 0; - } else if (scriptRequiresOpenType(script)) { - if (!engine->supportsScript(script)) { - delete engine; - engine = 0; - } + } else if (!engine->supportsScript(script)) { + qWarning(" OpenType support missing for script %d", int(script)); + delete engine; + engine = 0; } return engine; @@ -654,7 +633,7 @@ QStringList QFontconfigDatabase::fallbacksForFamily(const QString &family, QFont slant_value = FC_SLANT_OBLIQUE; FcPatternAddInteger(pattern, FC_SLANT, slant_value); - Q_ASSERT(uint(script) < SpecialLanguageCount); + Q_ASSERT(uint(script) < QChar::ScriptCount); if (*specialLanguages[script] != '\0') { FcLangSet *ls = FcLangSetCreate(); FcLangSetAdd(ls, (const FcChar8*)specialLanguages[script]); |