summaryrefslogtreecommitdiffstats
path: root/src/platformsupport/fontdatabases/fontconfig/qfontconfigdatabase.cpp
diff options
context:
space:
mode:
authorVolker Krause <volker.krause@kdab.com>2015-11-24 11:47:19 +0100
committerOlivier Goffart (Woboq GmbH) <ogoffart@woboq.com>2015-11-26 15:52:07 +0000
commit45470e71bcfefba577739a56ddecd0b1e9b97d5d (patch)
tree2fb8e2aa7ece604801a4f21a835c4fcf0398277f /src/platformsupport/fontdatabases/fontconfig/qfontconfigdatabase.cpp
parentee632a21f6d4f6ea1d4fe7e41cca0fee307c5e39 (diff)
Remove O(n^2) behavior in fallbacksForFamily().
Speeds up application startup by a few percent, even with just a normal amount of fonts installed. Change-Id: I4c3d87119ddbc53e66166f21cb72946cdf7e4a41 Reviewed-by: Olivier Goffart (Woboq GmbH) <ogoffart@woboq.com> Reviewed-by: Konstantin Ritt <ritt.ks@gmail.com>
Diffstat (limited to 'src/platformsupport/fontdatabases/fontconfig/qfontconfigdatabase.cpp')
-rw-r--r--src/platformsupport/fontdatabases/fontconfig/qfontconfigdatabase.cpp10
1 files changed, 7 insertions, 3 deletions
diff --git a/src/platformsupport/fontdatabases/fontconfig/qfontconfigdatabase.cpp b/src/platformsupport/fontdatabases/fontconfig/qfontconfigdatabase.cpp
index 0af9440b50..a5fe88871d 100644
--- a/src/platformsupport/fontdatabases/fontconfig/qfontconfigdatabase.cpp
+++ b/src/platformsupport/fontdatabases/fontconfig/qfontconfigdatabase.cpp
@@ -716,15 +716,19 @@ QStringList QFontconfigDatabase::fallbacksForFamily(const QString &family, QFont
FcPatternDestroy(pattern);
if (fontSet) {
+ QSet<QString> duplicates;
+ duplicates.reserve(fontSet->nfont + 1);
+ duplicates.insert(family.toCaseFolded());
for (int i = 0; i < fontSet->nfont; i++) {
FcChar8 *value = 0;
if (FcPatternGetString(fontSet->fonts[i], FC_FAMILY, 0, &value) != FcResultMatch)
continue;
// capitalize(value);
- QString familyName = QString::fromUtf8((const char *)value);
- if (!fallbackFamilies.contains(familyName,Qt::CaseInsensitive) &&
- familyName.compare(family, Qt::CaseInsensitive)) {
+ const QString familyName = QString::fromUtf8((const char *)value);
+ const QString familyNameCF = familyName.toCaseFolded();
+ if (!duplicates.contains(familyNameCF)) {
fallbackFamilies << familyName;
+ duplicates.insert(familyNameCF);
}
}
FcFontSetDestroy(fontSet);