From 244cc5da55b92bf08f32da01d7557decbd9ba66c Mon Sep 17 00:00:00 2001 From: Eskil Abrahamsen Blomfeldt Date: Thu, 21 Mar 2013 15:03:36 +0100 Subject: [PATCH] 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 --- .../fontconfig/qfontconfigdatabase.cpp | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) 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)