From c874e10cbcf67fa5fdddafc4dcbf8a54d7f36b2d Mon Sep 17 00:00:00 2001 From: Konstantin Ritt Date: Fri, 1 May 2015 08:18:36 +0400 Subject: Simplify QFontDatabase::findFont() QFontDatabase::load() is the only caller that passes non-null QFontPrivate* to QFontDatabase::findFont(), to adjust the pointSize with regards to the font's dpi; do that right in QFontDatabase::load(). The `multi` param's meaning is, in fact, an absence of the QFont::NoFontMerging flag, so prefer the latter and prevent ambiguity in the future. Change-Id: Icc7751044e454ca438e7627364faa415287bf1ae Reviewed-by: Eskil Abrahamsen Blomfeldt --- src/gui/text/qfontdatabase.cpp | 37 ++++++++++++++++++++----------------- 1 file changed, 20 insertions(+), 17 deletions(-) (limited to 'src/gui/text/qfontdatabase.cpp') diff --git a/src/gui/text/qfontdatabase.cpp b/src/gui/text/qfontdatabase.cpp index c1c1f04513..d07b1c5628 100644 --- a/src/gui/text/qfontdatabase.cpp +++ b/src/gui/text/qfontdatabase.cpp @@ -630,6 +630,7 @@ static void initFontDef(const QtFontDesc &desc, const QFontDef &request, QFontDe } else { fontDef->pixelSize = desc.size->pixelSize; } + fontDef->pointSize = request.pointSize; fontDef->styleHint = request.styleHint; fontDef->styleStrategy = request.styleStrategy; @@ -2505,9 +2506,7 @@ bool QFontDatabase::supportsThreadedFontRendering() /*! \internal */ -QFontEngine * -QFontDatabase::findFont(int script, const QFontPrivate *fp, - const QFontDef &request, bool multi) +QFontEngine *QFontDatabase::findFont(const QFontDef &request, int script) { QMutexLocker locker(fontDatabaseMutex()); @@ -2515,6 +2514,11 @@ QFontDatabase::findFont(int script, const QFontPrivate *fp, initializeDb(); QFontEngine *engine; + + // Until we specifically asked not to, try looking for Multi font engine + // first, the last '1' indicates that we want Multi font engine instead + // of single ones + bool multi = !(request.styleStrategy & QFont::NoFontMerging); QFontCache::Key key(request, script, multi ? 1 : 0); engine = QFontCache::instance()->findEngine(key); if (engine) { @@ -2529,6 +2533,7 @@ QFontDatabase::findFont(int script, const QFontPrivate *fp, if (qt_enable_test_font && request.family == QLatin1String("__Qt__Box__Engine__")) { engine =new QTestFontEngine(request.pixelSize); engine->fontDef = request; + return engine; } QtFontDesc desc; @@ -2537,7 +2542,7 @@ QFontDatabase::findFont(int script, const QFontPrivate *fp, if (index >= 0) { engine = loadEngine(script, request, desc.family, desc.foundry, desc.style, desc.size); if (engine) - initFontDef(desc, request, &engine->fontDef, engine->type() == QFontEngine::Multi); + initFontDef(desc, request, &engine->fontDef, multi); else blackListed.append(index); } else { @@ -2573,7 +2578,7 @@ QFontDatabase::findFont(int script, const QFontPrivate *fp, loadDef.family = desc.family->name; engine = loadEngine(script, loadDef, desc.family, desc.foundry, desc.style, desc.size); if (engine) - initFontDef(desc, loadDef, &engine->fontDef, engine->type() == QFontEngine::Multi); + initFontDef(desc, loadDef, &engine->fontDef, multi); else blackListed.append(index); } @@ -2588,12 +2593,6 @@ QFontDatabase::findFont(int script, const QFontPrivate *fp, FM_DEBUG("returning box engine"); } - if (fp && fp->dpi > 0) { - engine->fontDef.pointSize = qreal(double((engine->fontDef.pixelSize * 72) / fp->dpi)); - } else { - engine->fontDef.pointSize = request.pointSize; - } - return engine; } @@ -2661,12 +2660,16 @@ void QFontDatabase::load(const QFontPrivate *d, int script) for (; !fe && it != end; ++it) { req.family = *it; - fe = QFontDatabase::findFont(script, d, req, multi); - if (fe && (fe->type()==QFontEngine::Box) && !req.family.isEmpty()) { - if (fe->ref.load() == 0) - delete fe; - - fe = 0; + fe = QFontDatabase::findFont(req, script); + if (fe) { + if (fe->type() == QFontEngine::Box && !req.family.isEmpty()) { + if (fe->ref.load() == 0) + delete fe; + fe = 0; + } else { + if (d->dpi > 0) + fe->fontDef.pointSize = qreal(double((fe->fontDef.pixelSize * 72) / d->dpi)); + } } // No need to check requested fallback families again -- cgit v1.2.3