summaryrefslogtreecommitdiffstats
path: root/src/platformsupport/fontdatabases/fontconfig/qfontconfigdatabase.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/platformsupport/fontdatabases/fontconfig/qfontconfigdatabase.cpp')
-rw-r--r--src/platformsupport/fontdatabases/fontconfig/qfontconfigdatabase.cpp51
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]);