From 201bd2e59ac2ed19deb75809dbf41460dffad758 Mon Sep 17 00:00:00 2001 From: Konstantin Ritt Date: Mon, 15 Apr 2013 21:22:33 +0300 Subject: QFontConfigDatabase: Fix performance regression ..introduced by 244cc5da55b92bf08f32da01d7557decbd9ba66c Symbol fonts usually don't have code ranges support except Latin. Don't load FT face for font that doesn't look like a symbol font. Change-Id: Iec46aa84e27227e0bda5d50f96a2b2f75f58e950 Reviewed-by: Eskil Abrahamsen Blomfeldt --- .../fontdatabases/fontconfig/qfontconfigdatabase.cpp | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) (limited to 'src/platformsupport/fontdatabases') diff --git a/src/platformsupport/fontdatabases/fontconfig/qfontconfigdatabase.cpp b/src/platformsupport/fontdatabases/fontconfig/qfontconfigdatabase.cpp index 8d6f415fba..9c28c9fa63 100644 --- a/src/platformsupport/fontdatabases/fontconfig/qfontconfigdatabase.cpp +++ b/src/platformsupport/fontdatabases/fontconfig/qfontconfigdatabase.cpp @@ -491,8 +491,22 @@ void QFontconfigDatabase::populateFontDatabase() fontFile->fileName = QLatin1String((const char *)file_value); fontFile->indexValue = indexValue; - if (isSymbolFont(fontFile)) - writingSystems.setSupported(QFontDatabase::Other); + if (!writingSystems.supported(QFontDatabase::Symbol)) { + // Symbol encoding used to encode various crap in the 32..255 character + // code range, which belongs to Latin character code range. + // Symbol fonts usually don't have any other code ranges support. + bool mightBeSymbolFont = true; + for (int j = 2; j < QFontDatabase::WritingSystemsCount; ++j) { + if (writingSystems.supported(QFontDatabase::WritingSystem(j))) { + mightBeSymbolFont = false; + break; + } + } + if (mightBeSymbolFont && isSymbolFont(fontFile)) { + writingSystems.setSupported(QFontDatabase::Latin, false); + writingSystems.setSupported(QFontDatabase::Symbol); + } + } QFont::Style style = (slant_value == FC_SLANT_ITALIC) ? QFont::StyleItalic -- cgit v1.2.3