diff options
author | Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@digia.com> | 2013-03-21 15:03:36 +0100 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2013-03-26 18:04:50 +0100 |
commit | 244cc5da55b92bf08f32da01d7557decbd9ba66c (patch) | |
tree | 137969df3fcdb4f0e52710c5b5ebb227ffed9a7a /src/platformsupport/fontdatabases | |
parent | 46f3543aacffa5ed7e4358563bd03a33913c07a9 (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.cpp | 23 |
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) |