diff options
author | Konstantin Ritt <ritt.ks@gmail.com> | 2013-04-15 21:22:33 +0300 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2013-04-16 15:33:16 +0200 |
commit | 201bd2e59ac2ed19deb75809dbf41460dffad758 (patch) | |
tree | dd9393ef9ccef04172532c8dd14bf5df3d258ab7 | |
parent | 8e127d9df868952d41c8aa622b6d4ead8139a835 (diff) |
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 <eskil.abrahamsen-blomfeldt@digia.com>
-rw-r--r-- | src/platformsupport/fontdatabases/fontconfig/qfontconfigdatabase.cpp | 18 |
1 files changed, 16 insertions, 2 deletions
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 |