QWindowsFontDatabase: avoid multiple map lookups

Use the iterator-based API, and avoid a quadruple (!) lookup into a
QMap.

I'm aggressively cherry-picking to avoid merge clashes with an upcoming
fix.

Pick-to: 6.5 6.2
Change-Id: I05968f4aec9e42f84f909a1103e43ba323a9544f
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
(cherry picked from commit 2bc475f94ec037890490d8c2592497ba67c87c0b)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
This commit is contained in:
Giuseppe D'Angelo 2023-09-13 12:06:12 +02:00 committed by Qt Cherry-pick Bot
parent 3516539945
commit 7a705e9c60

View File

@ -1107,18 +1107,20 @@ bool QWindowsFontDatabase::fontsAlwaysScalable() const
void QWindowsFontDatabase::derefUniqueFont(const QString &uniqueFont)
{
if (m_uniqueFontData.contains(uniqueFont)) {
if (!m_uniqueFontData[uniqueFont].refCount.deref()) {
RemoveFontMemResourceEx(m_uniqueFontData[uniqueFont].handle);
m_uniqueFontData.remove(uniqueFont);
const auto it = m_uniqueFontData.find(uniqueFont);
if (it != m_uniqueFontData.end()) {
if (!it->refCount.deref()) {
RemoveFontMemResourceEx(it->handle);
m_uniqueFontData.erase(it);
}
}
}
void QWindowsFontDatabase::refUniqueFont(const QString &uniqueFont)
{
if (m_uniqueFontData.contains(uniqueFont))
m_uniqueFontData[uniqueFont].refCount.ref();
const auto it = m_uniqueFontData.find(uniqueFont);
if (it != m_uniqueFontData.end())
it->refCount.ref();
}
QStringList QWindowsFontDatabase::fallbacksForFamily(const QString &family, QFont::Style style, QFont::StyleHint styleHint, QChar::Script script) const