Revert "Fix font matching of typographic families on Windows"

This reverts commit bcd2fa484a.

There was a report that this caused infinite recursion on some
systems, so we revert it for now and re-add it later when the
issue has been resolved.

Task-number: QTBUG-74983
Change-Id: I747e0437232d72d7a87eb602b10fa09c7130ce8f
Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
This commit is contained in:
Eskil Abrahamsen Blomfeldt 2019-04-08 12:58:17 +02:00
parent 28c9e0e606
commit 9d1905da9c
5 changed files with 5 additions and 34 deletions

View File

@ -804,13 +804,6 @@ QString qt_resolveFontFamilyAlias(const QString &alias)
return alias; return alias;
} }
bool qt_isFontFamilyPopulated(const QString &familyName)
{
QFontDatabasePrivate *d = privateDb();
QtFontFamily *f = d->family(familyName, QFontDatabasePrivate::RequestFamily);
return f != nullptr && f->populated;
}
/*! /*!
Returns a list of alternative fonts for the specified \a family and Returns a list of alternative fonts for the specified \a family and
\a style and \a script using the \a styleHint given. \a style and \a script using the \a styleHint given.

View File

@ -60,7 +60,6 @@ void qt_registerFont(const QString &familyname, const QString &stylename,
void qt_registerFontFamily(const QString &familyName); void qt_registerFontFamily(const QString &familyName);
void qt_registerAliasToFontFamily(const QString &familyName, const QString &alias); void qt_registerAliasToFontFamily(const QString &familyName, const QString &alias);
bool qt_isFontFamilyPopulated(const QString &familyName);
/*! /*!
Registers the pre-rendered QPF2 font contained in the given \a dataArray. Registers the pre-rendered QPF2 font contained in the given \a dataArray.
@ -666,16 +665,6 @@ void QPlatformFontDatabase::registerAliasToFontFamily(const QString &familyName,
qt_registerAliasToFontFamily(familyName, alias); qt_registerAliasToFontFamily(familyName, alias);
} }
/*!
Helper function that returns true if the font family has already been registered and populated.
\since 5.14
*/
bool QPlatformFontDatabase::isFamilyPopulated(const QString &familyName)
{
return qt_isFontFamilyPopulated(familyName);
}
/*! /*!
\class QPlatformFontDatabase \class QPlatformFontDatabase
\since 5.0 \since 5.0

View File

@ -139,8 +139,6 @@ public:
static void registerFontFamily(const QString &familyName); static void registerFontFamily(const QString &familyName);
static void registerAliasToFontFamily(const QString &familyName, const QString &alias); static void registerAliasToFontFamily(const QString &familyName, const QString &alias);
static bool isFamilyPopulated(const QString &familyName);
}; };
QT_END_NAMESPACE QT_END_NAMESPACE

View File

@ -1012,8 +1012,7 @@ static bool addFontToDatabase(QString familyName,
const LOGFONT &logFont, const LOGFONT &logFont,
const TEXTMETRIC *textmetric, const TEXTMETRIC *textmetric,
const FONTSIGNATURE *signature, const FONTSIGNATURE *signature,
int type, int type)
QWindowsFontDatabase *db)
{ {
// the "@family" fonts are just the same as "family". Ignore them. // the "@family" fonts are just the same as "family". Ignore them.
if (familyName.isEmpty() || familyName.at(0) == QLatin1Char('@') || familyName.startsWith(QLatin1String("WST_"))) if (familyName.isEmpty() || familyName.at(0) == QLatin1Char('@') || familyName.startsWith(QLatin1String("WST_")))
@ -1093,12 +1092,6 @@ static bool addFontToDatabase(QString familyName,
writingSystems.setSupported(ws); writingSystems.setSupported(ws);
} }
// We came here from populating a different font family, so we have
// to ensure the entire typographic family is populated before we
// mark it as such inside registerFont()
if (!subFamilyName.isEmpty() && familyName != subFamilyName && !QPlatformFontDatabase::isFamilyPopulated(familyName))
db->populateFamily(familyName);
QPlatformFontDatabase::registerFont(familyName, styleName, foundryName, weight, QPlatformFontDatabase::registerFont(familyName, styleName, foundryName, weight,
style, stretch, antialias, scalable, size, fixed, writingSystems, createFontFile(faceName)); style, stretch, antialias, scalable, size, fixed, writingSystems, createFontFile(faceName));
@ -1125,7 +1118,7 @@ static bool addFontToDatabase(QString familyName,
} }
static int QT_WIN_CALLBACK storeFont(const LOGFONT *logFont, const TEXTMETRIC *textmetric, static int QT_WIN_CALLBACK storeFont(const LOGFONT *logFont, const TEXTMETRIC *textmetric,
DWORD type, LPARAM lParam) DWORD type, LPARAM)
{ {
const ENUMLOGFONTEX *f = reinterpret_cast<const ENUMLOGFONTEX *>(logFont); const ENUMLOGFONTEX *f = reinterpret_cast<const ENUMLOGFONTEX *>(logFont);
const QString familyName = QString::fromWCharArray(f->elfLogFont.lfFaceName); const QString familyName = QString::fromWCharArray(f->elfLogFont.lfFaceName);
@ -1137,7 +1130,7 @@ static int QT_WIN_CALLBACK storeFont(const LOGFONT *logFont, const TEXTMETRIC *t
const FONTSIGNATURE *signature = nullptr; const FONTSIGNATURE *signature = nullptr;
if (type & TRUETYPE_FONTTYPE) if (type & TRUETYPE_FONTTYPE)
signature = &reinterpret_cast<const NEWTEXTMETRICEX *>(textmetric)->ntmFontSig; signature = &reinterpret_cast<const NEWTEXTMETRICEX *>(textmetric)->ntmFontSig;
addFontToDatabase(familyName, styleName, *logFont, textmetric, signature, type, reinterpret_cast<QWindowsFontDatabase *>(lParam)); addFontToDatabase(familyName, styleName, *logFont, textmetric, signature, type);
// keep on enumerating // keep on enumerating
return 1; return 1;
@ -1156,7 +1149,7 @@ void QWindowsFontDatabase::populateFamily(const QString &familyName)
familyName.toWCharArray(lf.lfFaceName); familyName.toWCharArray(lf.lfFaceName);
lf.lfFaceName[familyName.size()] = 0; lf.lfFaceName[familyName.size()] = 0;
lf.lfPitchAndFamily = 0; lf.lfPitchAndFamily = 0;
EnumFontFamiliesEx(dummy, &lf, storeFont, reinterpret_cast<LPARAM>(this), 0); EnumFontFamiliesEx(dummy, &lf, storeFont, 0, 0);
ReleaseDC(0, dummy); ReleaseDC(0, dummy);
} }
@ -1597,7 +1590,7 @@ QStringList QWindowsFontDatabase::addApplicationFont(const QByteArray &fontData,
GetTextMetrics(hdc, &textMetrics); GetTextMetrics(hdc, &textMetrics);
addFontToDatabase(familyName, styleName, lf, &textMetrics, &signatures.at(j), addFontToDatabase(familyName, styleName, lf, &textMetrics, &signatures.at(j),
TRUETYPE_FONTTYPE, this); TRUETYPE_FONTTYPE);
SelectObject(hdc, oldobj); SelectObject(hdc, oldobj);
DeleteObject(hfont); DeleteObject(hfont);

View File

@ -96,8 +96,6 @@ public:
QWindowsFontDatabase(); QWindowsFontDatabase();
~QWindowsFontDatabase() override; ~QWindowsFontDatabase() override;
void ensureFamilyPopulated(const QString &familyName);
void populateFontDatabase() override; void populateFontDatabase() override;
void populateFamily(const QString &familyName) override; void populateFamily(const QString &familyName) override;
QFontEngine *fontEngine(const QFontDef &fontDef, void *handle) override; QFontEngine *fontEngine(const QFontDef &fontDef, void *handle) override;