Revert "Avoid populating font family aliases if family matched"

This reverts commit 69d525a6fa.

The change introduced behavior changes on Windows, where family
aliases are used to build a full set of styles for a family.

Change-Id: I64ca1cf5febf0a6277cbe0a0041ccdb76da72196
Pick-to: 6.3 6.2 5.15
Reviewed-by: Timur Pocheptsov <timur.pocheptsov@qt.io>
bb10
Tor Arne Vestbø 2022-03-29 15:35:47 +00:00
parent 9a74d94ff5
commit 344e0e7141
1 changed files with 9 additions and 15 deletions

View File

@ -905,13 +905,6 @@ static QtFontStyle *bestStyle(QtFontFoundry *foundry, const QtFontStyle::Key &st
return foundry->styles[best];
}
enum {
FamilyMismatch = 0x800000,
ScriptMismatch = 0x080000,
PitchMismatch = 0x004000,
StyleMismatch = 0x002000,
BitmapScaledPenalty = 0x001000
};
static
unsigned int bestFoundry(int script, unsigned int score, int styleStrategy,
@ -1015,16 +1008,20 @@ unsigned int bestFoundry(int script, unsigned int score, int styleStrategy,
unsigned int this_score = 0x0000;
enum {
PitchMismatch = 0x4000,
StyleMismatch = 0x2000,
BitmapScaledPenalty = 0x1000
};
if (pitch != '*') {
if ((pitch == 'm' && !family->fixedPitch)
|| (pitch == 'p' && family->fixedPitch))
this_score |= PitchMismatch;
this_score += PitchMismatch;
}
if (styleKey != style->key)
this_score |= StyleMismatch;
this_score += StyleMismatch;
if (!style->smoothScalable && px != size->pixelSize) // bitmap scaled
this_score |= BitmapScaledPenalty;
this_score += BitmapScaledPenalty;
if (px != pixelSize) // close, but not exact, size match
this_score += qAbs(px - pixelSize);
@ -1109,14 +1106,11 @@ static int match(int script,
if (!matchFamilyName(family_name, test.family))
continue;
score &= ~FamilyMismatch;
test.family->ensurePopulated();
// Check if family is supported in the script we want
if (writingSystem != QFontDatabase::Any && !familySupportsWritingSystem(test.family, writingSystem))
continue;
score &= ~ScriptMismatch;
// as we know the script is supported, we can be sure
// to find a matching font here.
@ -2416,7 +2410,7 @@ QFontEngine *QFontDatabasePrivate::findFont(const QFontDef &req,
QList<int> blackListed;
unsigned int score = UINT_MAX;
int index = match(multi ? QChar::Script_Common : script, request, family_name, foundry_name, &desc, blackListed, &score);
if ((score & FamilyMismatch) && QGuiApplicationPrivate::platformIntegration()->fontDatabase()->populateFamilyAliases(family_name)) {
if (score > 0 && QGuiApplicationPrivate::platformIntegration()->fontDatabase()->populateFamilyAliases(family_name)) {
// We populated family aliases (e.g. localized families), so try again
index = match(multi ? QChar::Script_Common : script, request, family_name, foundry_name, &desc, blackListed);
}