summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKonstantin Ritt <ritt.ks@gmail.com>2013-04-15 21:22:33 +0300
committerThe Qt Project <gerrit-noreply@qt-project.org>2013-04-16 15:33:16 +0200
commit201bd2e59ac2ed19deb75809dbf41460dffad758 (patch)
treedd9393ef9ccef04172532c8dd14bf5df3d258ab7
parent8e127d9df868952d41c8aa622b6d4ead8139a835 (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.cpp18
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