summaryrefslogtreecommitdiffstats
path: root/src/gui/text/qfontdatabase.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/gui/text/qfontdatabase.cpp')
-rw-r--r--src/gui/text/qfontdatabase.cpp29
1 files changed, 27 insertions, 2 deletions
diff --git a/src/gui/text/qfontdatabase.cpp b/src/gui/text/qfontdatabase.cpp
index 33dc27983a..404a722e29 100644
--- a/src/gui/text/qfontdatabase.cpp
+++ b/src/gui/text/qfontdatabase.cpp
@@ -74,6 +74,7 @@
# define FM_DEBUG if (false) qDebug
#endif
+#include <qtgui_tracepoints_p.h>
QT_BEGIN_NAMESPACE
@@ -804,6 +805,13 @@ QString qt_resolveFontFamilyAlias(const QString &alias)
return alias;
}
+/*!
+ Returns a list of alternative fonts for the specified \a family and
+ \a style and \a script using the \a styleHint given.
+
+ Default implementation returns a list of fonts for which \a style and \a script support
+ has been reported during the font database population.
+*/
QStringList QPlatformFontDatabase::fallbacksForFamily(const QString &family, QFont::Style style, QFont::StyleHint styleHint, QChar::Script script) const
{
Q_UNUSED(family);
@@ -1002,6 +1010,8 @@ QFontEngine *loadEngine(int script, const QFontDef &request,
QFontEngine *engine = loadSingleEngine(script, request, family, foundry, style, size);
if (engine && !(request.styleStrategy & QFont::NoFontMerging) && !engine->symbol) {
+ Q_TRACE(qfontdatabase_loadengine, request.family, request.pointSize);
+
QPlatformFontDatabase *pfdb = QGuiApplicationPrivate::platformIntegration()->fontDatabase();
QFontEngineMulti *pfMultiEngine = pfdb->fontEngineMulti(engine, QChar::Script(script));
if (!request.fallBackFamilies.isEmpty()) {
@@ -2432,6 +2442,8 @@ int QFontDatabasePrivate::addAppFont(const QByteArray &fontData, const QString &
font.data = fontData;
font.fileName = fileName;
+ Q_TRACE(qfontdatabaseprivate_addappfont, fileName);
+
int i;
for (i = 0; i < applicationFonts.count(); ++i)
if (applicationFonts.at(i).families.isEmpty())
@@ -2487,6 +2499,9 @@ int QFontDatabase::addApplicationFont(const QString &fileName)
QFile f(fileName);
if (!f.open(QIODevice::ReadOnly))
return -1;
+
+ Q_TRACE(qfontdatabase_addapplicationfont, fileName);
+
data = f.readAll();
}
QMutexLocker locker(fontDatabaseMutex());
@@ -2685,7 +2700,15 @@ QFontEngine *QFontDatabase::findFont(const QFontDef &request, int script)
index = match(multi ? QChar::Script_Common : script, request, family_name, foundry_name, &desc, blackListed);
}
if (index >= 0) {
- engine = loadEngine(script, request, desc.family, desc.foundry, desc.style, desc.size);
+ QFontDef fontDef = request;
+
+ // Don't pass empty family names to the platform font database, since it will then invoke its own matching
+ // and we will be out of sync with the matched font.
+ if (fontDef.family.isEmpty())
+ fontDef.family = desc.family->name;
+
+ engine = loadEngine(script, fontDef, desc.family, desc.foundry, desc.style, desc.size);
+
if (engine)
initFontDef(desc, request, &engine->fontDef, multi);
else
@@ -2775,7 +2798,9 @@ void QFontDatabase::load(const QFontPrivate *d, int script)
if (d->engineData->engines[script])
return;
- QFontEngine *fe = Q_NULLPTR;
+ QFontEngine *fe = nullptr;
+
+ Q_TRACE(qfontdatabase_load, req.family, req.pointSize);
req.fallBackFamilies = fallBackFamilies;
if (!req.fallBackFamilies.isEmpty())