diff options
Diffstat (limited to 'src/gui/text/qfontdatabase.cpp')
-rw-r--r-- | src/gui/text/qfontdatabase.cpp | 31 |
1 files changed, 28 insertions, 3 deletions
diff --git a/src/gui/text/qfontdatabase.cpp b/src/gui/text/qfontdatabase.cpp index d3a13d801b..3d6d3b7886 100644 --- a/src/gui/text/qfontdatabase.cpp +++ b/src/gui/text/qfontdatabase.cpp @@ -670,7 +670,7 @@ static QStringList fallbacksForFamily(const QString &family, QFont::Style style, return *fallbacks; // make sure that the db has all fallback families - QStringList userFallbacks = db->applicationFallbackFontFamilies.value(script == QChar::Script_Common ? QChar::Script_Latin : script); + QStringList userFallbacks = db->applicationFallbackFontFamilies.value(script == QChar::Script_Latin ? QChar::Script_Common : script); QStringList retList = userFallbacks + QGuiApplicationPrivate::platformIntegration()->fontDatabase()->fallbacksForFamily(family,style,styleHint,script); QStringList::iterator i; @@ -2187,6 +2187,8 @@ int QFontDatabasePrivate::addAppFont(const QByteArray &fontData, const QString & // loaded, so it has to be flushed. QFontCache::instance()->clear(); + fallbacksCache.clear(); + emit qApp->fontDatabaseChanged(); return i; @@ -2386,23 +2388,32 @@ bool QFontDatabase::removeAllApplicationFonts() be prioritized in reverse order, so that the last family added will be checked first and so on. + \note Qt's font matching algorithm considers \c{QChar::Script_Common} (undetermined script) + and \c{QChar::Script_Latin} the same. Adding a fallback for either of these will also apply + to the other. + \sa setApplicationFallbackFontFamilies(), removeApplicationFallbackFontFamily(), applicationFallbackFontFamilies() */ void QFontDatabase::addApplicationFallbackFontFamily(QChar::Script script, const QString &familyName) { QMutexLocker locker(fontDatabaseMutex()); - if (script < QChar::Script_Latin) { + if (script < QChar::Script_Common) { qCWarning(lcFontDb) << "Invalid script passed to addApplicationFallbackFontFamily:" << script; return; } + if (script == QChar::Script_Latin) + script = QChar::Script_Common; + auto *db = QFontDatabasePrivate::instance(); auto it = db->applicationFallbackFontFamilies.find(script); if (it == db->applicationFallbackFontFamilies.end()) it = db->applicationFallbackFontFamilies.insert(script, QStringList{}); it->prepend(familyName); + + QFontCache::instance()->clear(); db->fallbacksCache.clear(); } @@ -2420,6 +2431,14 @@ bool QFontDatabase::removeApplicationFallbackFontFamily(QChar::Script script, co { QMutexLocker locker(fontDatabaseMutex()); + if (script < QChar::Script_Common) { + qCWarning(lcFontDb) << "Invalid script passed to removeApplicationFallbackFontFamily:" << script; + return false; + } + + if (script == QChar::Script_Latin) + script = QChar::Script_Common; + auto *db = QFontDatabasePrivate::instance(); auto it = db->applicationFallbackFontFamilies.find(script); if (it != db->applicationFallbackFontFamilies.end()) { @@ -2452,11 +2471,14 @@ void QFontDatabase::setApplicationFallbackFontFamilies(QChar::Script script, con { QMutexLocker locker(fontDatabaseMutex()); - if (script < QChar::Script_Latin) { + if (script < QChar::Script_Common) { qCWarning(lcFontDb) << "Invalid script passed to setApplicationFallbackFontFamilies:" << script; return; } + if (script == QChar::Script_Latin) + script = QChar::Script_Common; + auto *db = QFontDatabasePrivate::instance(); db->applicationFallbackFontFamilies[script] = familyNames; @@ -2476,6 +2498,9 @@ QStringList QFontDatabase::applicationFallbackFontFamilies(QChar::Script script) { QMutexLocker locker(fontDatabaseMutex()); + if (script == QChar::Script_Latin) + script = QChar::Script_Common; + auto *db = QFontDatabasePrivate::instance(); return db->applicationFallbackFontFamilies.value(script); } |