summaryrefslogtreecommitdiffstats
path: root/src/platformsupport/fontdatabases
diff options
context:
space:
mode:
authorEskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@digia.com>2013-03-21 15:03:36 +0100
committerThe Qt Project <gerrit-noreply@qt-project.org>2013-03-26 18:04:50 +0100
commit244cc5da55b92bf08f32da01d7557decbd9ba66c (patch)
tree137969df3fcdb4f0e52710c5b5ebb227ffed9a7a /src/platformsupport/fontdatabases
parent46f3543aacffa5ed7e4358563bd03a33913c07a9 (diff)
FontConfig: Correctly report Symbol writing system support
When all the Q_WS_X11 were removed, we also removed the special case for symbol fonts in QFontDatabase for FontConfig. This was checkSymbolFont() in Qt 4, and this patch copies the code and adapts it to Qt 5. Task-number: QTBUG-30044 Change-Id: I346f208052013eae9de3c33c210bf5db1d2aef87 Reviewed-by: Konstantin Ritt <ritt.ks@gmail.com>
Diffstat (limited to 'src/platformsupport/fontdatabases')
-rw-r--r--src/platformsupport/fontdatabases/fontconfig/qfontconfigdatabase.cpp23
1 files changed, 23 insertions, 0 deletions
diff --git a/src/platformsupport/fontdatabases/fontconfig/qfontconfigdatabase.cpp b/src/platformsupport/fontdatabases/fontconfig/qfontconfigdatabase.cpp
index 329268395e..288f6ca0e3 100644
--- a/src/platformsupport/fontdatabases/fontconfig/qfontconfigdatabase.cpp
+++ b/src/platformsupport/fontdatabases/fontconfig/qfontconfigdatabase.cpp
@@ -350,6 +350,26 @@ static const char *getFcFamilyForStyleHint(const QFont::StyleHint style)
return stylehint;
}
+static bool isSymbolFont(FontFile *fontFile)
+{
+ if (fontFile == 0 || fontFile->fileName.isEmpty())
+ return false;
+
+ QFontEngine::FaceId id;
+ id.filename = fontFile->fileName.toLocal8Bit();
+ id.index = fontFile->indexValue;
+
+ QFreetypeFace *f = QFreetypeFace::getFace(id);
+ if (f == 0) {
+ qWarning("isSymbolFont: Couldn't open face %s/%d", id.filename.data(), id.index);
+ return false;
+ }
+
+ bool hasSymbolMap = f->symbol_map;
+ f->release(id);
+ return hasSymbolMap;
+}
+
void QFontconfigDatabase::populateFontDatabase()
{
FcFontSet *fonts;
@@ -469,6 +489,9 @@ void QFontconfigDatabase::populateFontDatabase()
fontFile->fileName = QLatin1String((const char *)file_value);
fontFile->indexValue = indexValue;
+ if (isSymbolFont(fontFile))
+ writingSystems.setSupported(QFontDatabase::Other);
+
QFont::Style style = (slant_value == FC_SLANT_ITALIC)
? QFont::StyleItalic
: ((slant_value == FC_SLANT_OBLIQUE)