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>
This commit is contained in:
parent
ee632a21f6
commit
45470e71bc
@ -716,15 +716,19 @@ QStringList QFontconfigDatabase::fallbacksForFamily(const QString &family, QFont
|
|||||||
FcPatternDestroy(pattern);
|
FcPatternDestroy(pattern);
|
||||||
|
|
||||||
if (fontSet) {
|
if (fontSet) {
|
||||||
|
QSet<QString> duplicates;
|
||||||
|
duplicates.reserve(fontSet->nfont + 1);
|
||||||
|
duplicates.insert(family.toCaseFolded());
|
||||||
for (int i = 0; i < fontSet->nfont; i++) {
|
for (int i = 0; i < fontSet->nfont; i++) {
|
||||||
FcChar8 *value = 0;
|
FcChar8 *value = 0;
|
||||||
if (FcPatternGetString(fontSet->fonts[i], FC_FAMILY, 0, &value) != FcResultMatch)
|
if (FcPatternGetString(fontSet->fonts[i], FC_FAMILY, 0, &value) != FcResultMatch)
|
||||||
continue;
|
continue;
|
||||||
// capitalize(value);
|
// capitalize(value);
|
||||||
QString familyName = QString::fromUtf8((const char *)value);
|
const QString familyName = QString::fromUtf8((const char *)value);
|
||||||
if (!fallbackFamilies.contains(familyName,Qt::CaseInsensitive) &&
|
const QString familyNameCF = familyName.toCaseFolded();
|
||||||
familyName.compare(family, Qt::CaseInsensitive)) {
|
if (!duplicates.contains(familyNameCF)) {
|
||||||
fallbackFamilies << familyName;
|
fallbackFamilies << familyName;
|
||||||
|
duplicates.insert(familyNameCF);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
FcFontSetDestroy(fontSet);
|
FcFontSetDestroy(fontSet);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user