Default implementation for QPlatformFontDatabase::fallbacksForFamily()
...mainly for platforms that do not provide a native/unified way to obtain system-defined font fallbacks list (ie !CoreText && !FontConfig). Change-Id: I23c5589d79ddecb6311ccc52ec8b29977f06d408 Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@theqtcompany.com>
This commit is contained in:
parent
735cd0ccf3
commit
5e3e34731b
@ -756,6 +756,46 @@ QString qt_resolveFontFamilyAlias(const QString &alias)
|
|||||||
return alias;
|
return alias;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QStringList QPlatformFontDatabase::fallbacksForFamily(const QString &family, QFont::Style style, QFont::StyleHint styleHint, QChar::Script script) const
|
||||||
|
{
|
||||||
|
Q_UNUSED(family);
|
||||||
|
Q_UNUSED(styleHint);
|
||||||
|
|
||||||
|
QStringList retList;
|
||||||
|
|
||||||
|
size_t writingSystem = std::find(scriptForWritingSystem,
|
||||||
|
scriptForWritingSystem + QFontDatabase::WritingSystemsCount,
|
||||||
|
script) - scriptForWritingSystem;
|
||||||
|
if (writingSystem >= QFontDatabase::WritingSystemsCount)
|
||||||
|
writingSystem = QFontDatabase::Any;
|
||||||
|
|
||||||
|
QFontDatabasePrivate *db = privateDb();
|
||||||
|
for (int i = 0; i < db->count; ++i) {
|
||||||
|
QtFontFamily *f = db->families[i];
|
||||||
|
|
||||||
|
f->ensurePopulated();
|
||||||
|
|
||||||
|
if (writingSystem > QFontDatabase::Any && f->writingSystems[writingSystem] != QtFontFamily::Supported)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
for (int j = 0; j < f->count; ++j) {
|
||||||
|
QtFontFoundry *foundry = f->foundries[j];
|
||||||
|
|
||||||
|
for (int k = 0; k < foundry->count; ++k) {
|
||||||
|
if (style == foundry->styles[k]->key.style) {
|
||||||
|
if (foundry->name.isEmpty())
|
||||||
|
retList.append(f->name);
|
||||||
|
else
|
||||||
|
retList.append(f->name + QLatin1String(" [") + foundry->name + QLatin1Char(']'));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return retList;
|
||||||
|
}
|
||||||
|
|
||||||
QStringList qt_fallbacksForFamily(const QString &family, QFont::Style style, QFont::StyleHint styleHint, QChar::Script script)
|
QStringList qt_fallbacksForFamily(const QString &family, QFont::Style style, QFont::StyleHint styleHint, QChar::Script script)
|
||||||
{
|
{
|
||||||
// make sure that the db has all fallback families
|
// make sure that the db has all fallback families
|
||||||
|
@ -343,17 +343,15 @@ QFontEngine *QPlatformFontDatabase::fontEngine(const QByteArray &fontData, qreal
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
|
\fn QStringList QPlatformFontDatabase::fallbacksForFamily(const QString &family, QFont::Style style, QFont::StyleHint styleHint, QChar::Script script) const
|
||||||
|
|
||||||
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.
|
||||||
|
|
||||||
|
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
|
// implemented in qfontdatabase.cpp
|
||||||
{
|
|
||||||
Q_UNUSED(family);
|
|
||||||
Q_UNUSED(style);
|
|
||||||
Q_UNUSED(styleHint);
|
|
||||||
Q_UNUSED(script);
|
|
||||||
return QStringList();
|
|
||||||
}
|
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
Adds an application font described by the font contained supplied \a fontData
|
Adds an application font described by the font contained supplied \a fontData
|
||||||
|
@ -176,15 +176,6 @@ QFontEngine *QBasicFontDatabase::fontEngine(const QByteArray &fontData, qreal pi
|
|||||||
return fe;
|
return fe;
|
||||||
}
|
}
|
||||||
|
|
||||||
QStringList QBasicFontDatabase::fallbacksForFamily(const QString &family, QFont::Style style, QFont::StyleHint styleHint, QChar::Script script) const
|
|
||||||
{
|
|
||||||
Q_UNUSED(family);
|
|
||||||
Q_UNUSED(style);
|
|
||||||
Q_UNUSED(script);
|
|
||||||
Q_UNUSED(styleHint);
|
|
||||||
return QStringList();
|
|
||||||
}
|
|
||||||
|
|
||||||
QStringList QBasicFontDatabase::addApplicationFont(const QByteArray &fontData, const QString &fileName)
|
QStringList QBasicFontDatabase::addApplicationFont(const QByteArray &fontData, const QString &fileName)
|
||||||
{
|
{
|
||||||
return addTTFile(fontData,fileName.toLocal8Bit());
|
return addTTFile(fontData,fileName.toLocal8Bit());
|
||||||
|
@ -63,7 +63,6 @@ public:
|
|||||||
void populateFontDatabase() Q_DECL_OVERRIDE;
|
void populateFontDatabase() Q_DECL_OVERRIDE;
|
||||||
QFontEngine *fontEngine(const QFontDef &fontDef, void *handle) Q_DECL_OVERRIDE;
|
QFontEngine *fontEngine(const QFontDef &fontDef, void *handle) Q_DECL_OVERRIDE;
|
||||||
QFontEngine *fontEngine(const QByteArray &fontData, qreal pixelSize, QFont::HintingPreference hintingPreference) Q_DECL_OVERRIDE;
|
QFontEngine *fontEngine(const QByteArray &fontData, qreal pixelSize, QFont::HintingPreference hintingPreference) Q_DECL_OVERRIDE;
|
||||||
QStringList fallbacksForFamily(const QString &family, QFont::Style style, QFont::StyleHint styleHint, QChar::Script script) const Q_DECL_OVERRIDE;
|
|
||||||
QStringList addApplicationFont(const QByteArray &fontData, const QString &fileName) Q_DECL_OVERRIDE;
|
QStringList addApplicationFont(const QByteArray &fontData, const QString &fileName) Q_DECL_OVERRIDE;
|
||||||
void releaseHandle(void *handle) Q_DECL_OVERRIDE;
|
void releaseHandle(void *handle) Q_DECL_OVERRIDE;
|
||||||
|
|
||||||
|
@ -55,16 +55,7 @@ void QAndroidPlatformFontDatabase::populateFontDatabase()
|
|||||||
QList<QFileInfo> entries = dir.entryInfoList(QStringList() << QStringLiteral("*.ttf") << QStringLiteral("*.otf"), QDir::Files);
|
QList<QFileInfo> entries = dir.entryInfoList(QStringList() << QStringLiteral("*.ttf") << QStringLiteral("*.otf"), QDir::Files);
|
||||||
for (int i = 0; i < int(entries.count()); ++i) {
|
for (int i = 0; i < int(entries.count()); ++i) {
|
||||||
const QByteArray file = QFile::encodeName(entries.at(i).absoluteFilePath());
|
const QByteArray file = QFile::encodeName(entries.at(i).absoluteFilePath());
|
||||||
QSupportedWritingSystems supportedWritingSystems;
|
QBasicFontDatabase::addTTFile(QByteArray(), file);
|
||||||
QStringList families = addTTFile(QByteArray(), file, &supportedWritingSystems);
|
|
||||||
|
|
||||||
extern int qt_script_for_writing_system(QFontDatabase::WritingSystem writingSystem);
|
|
||||||
for (int i = 0; i < QFontDatabase::WritingSystemsCount; ++i) {
|
|
||||||
if (i == QFontDatabase::Any || supportedWritingSystems.supported(QFontDatabase::WritingSystem(i))) {
|
|
||||||
QChar::Script script = QChar::Script(qt_script_for_writing_system(QFontDatabase::WritingSystem(i)));
|
|
||||||
m_fallbacks[script] += families;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -73,15 +64,16 @@ QStringList QAndroidPlatformFontDatabase::fallbacksForFamily(const QString &fami
|
|||||||
QFont::StyleHint styleHint,
|
QFont::StyleHint styleHint,
|
||||||
QChar::Script script) const
|
QChar::Script script) const
|
||||||
{
|
{
|
||||||
Q_UNUSED(family);
|
QStringList result;
|
||||||
Q_UNUSED(style);
|
|
||||||
|
|
||||||
if (styleHint == QFont::Monospace || styleHint == QFont::Courier)
|
if (styleHint == QFont::Monospace || styleHint == QFont::Courier)
|
||||||
return QString(qgetenv("QT_ANDROID_FONTS_MONOSPACE")).split(";") + m_fallbacks[script];
|
result.append(QString(qgetenv("QT_ANDROID_FONTS_MONOSPACE")).split(";"));
|
||||||
else if (styleHint == QFont::Serif)
|
else if (styleHint == QFont::Serif)
|
||||||
return QString(qgetenv("QT_ANDROID_FONTS_SERIF")).split(";") + m_fallbacks[script];
|
result.append(QString(qgetenv("QT_ANDROID_FONTS_SERIF")).split(";"));
|
||||||
|
else
|
||||||
|
result.append(QString(qgetenv("QT_ANDROID_FONTS")).split(";"));
|
||||||
|
result.append(QPlatformFontDatabase::fallbacksForFamily(family, style, styleHint, script));
|
||||||
|
|
||||||
return QString(qgetenv("QT_ANDROID_FONTS")).split(";") + m_fallbacks[script];
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
QT_END_NAMESPACE
|
QT_END_NAMESPACE
|
||||||
|
@ -47,9 +47,6 @@ public:
|
|||||||
QFont::Style style,
|
QFont::Style style,
|
||||||
QFont::StyleHint styleHint,
|
QFont::StyleHint styleHint,
|
||||||
QChar::Script script) const;
|
QChar::Script script) const;
|
||||||
|
|
||||||
private:
|
|
||||||
QHash<QChar::Script, QStringList> m_fallbacks;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
QT_END_NAMESPACE
|
QT_END_NAMESPACE
|
||||||
|
@ -1080,11 +1080,7 @@ QWindowsFontDatabase::~QWindowsFontDatabase()
|
|||||||
|
|
||||||
QFontEngineMulti *QWindowsFontDatabase::fontEngineMulti(QFontEngine *fontEngine, QChar::Script script)
|
QFontEngineMulti *QWindowsFontDatabase::fontEngineMulti(QFontEngine *fontEngine, QChar::Script script)
|
||||||
{
|
{
|
||||||
if (script == QChar::Script_Common)
|
return new QWindowsMultiFontEngine(fontEngine, script);
|
||||||
return new QWindowsMultiFontEngine(fontEngine, script);
|
|
||||||
// ### as long as fallbacksForFamily() does not take script parameter into account,
|
|
||||||
// prefer QFontEngineMulti's loadEngine() implementation for complex scripts
|
|
||||||
return QPlatformFontDatabase::fontEngineMulti(fontEngine, script);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
QFontEngine * QWindowsFontDatabase::fontEngine(const QFontDef &fontDef, void *handle)
|
QFontEngine * QWindowsFontDatabase::fontEngine(const QFontDef &fontDef, void *handle)
|
||||||
@ -1666,11 +1662,10 @@ QString QWindowsFontDatabase::familyForStyleHint(QFont::StyleHint styleHint)
|
|||||||
|
|
||||||
QStringList QWindowsFontDatabase::fallbacksForFamily(const QString &family, QFont::Style style, QFont::StyleHint styleHint, QChar::Script script) const
|
QStringList QWindowsFontDatabase::fallbacksForFamily(const QString &family, QFont::Style style, QFont::StyleHint styleHint, QChar::Script script) const
|
||||||
{
|
{
|
||||||
QStringList result = QPlatformFontDatabase::fallbacksForFamily(family, style, styleHint, script);
|
QStringList result;
|
||||||
if (!result.isEmpty())
|
|
||||||
return result;
|
|
||||||
result.append(QWindowsFontDatabase::familyForStyleHint(styleHint));
|
result.append(QWindowsFontDatabase::familyForStyleHint(styleHint));
|
||||||
result.append(QWindowsFontDatabase::extraTryFontsForFamily(family));
|
result.append(QWindowsFontDatabase::extraTryFontsForFamily(family));
|
||||||
|
result.append(QPlatformFontDatabase::fallbacksForFamily(family, style, styleHint, script));
|
||||||
|
|
||||||
qCDebug(lcQpaFonts) << __FUNCTION__ << family << style << styleHint
|
qCDebug(lcQpaFonts) << __FUNCTION__ << family << style << styleHint
|
||||||
<< script << result;
|
<< script << result;
|
||||||
|
@ -661,9 +661,7 @@ QFontEngine *QWindowsFontDatabaseFT::fontEngine(const QByteArray &fontData, qrea
|
|||||||
|
|
||||||
QStringList QWindowsFontDatabaseFT::fallbacksForFamily(const QString &family, QFont::Style style, QFont::StyleHint styleHint, QChar::Script script) const
|
QStringList QWindowsFontDatabaseFT::fallbacksForFamily(const QString &family, QFont::Style style, QFont::StyleHint styleHint, QChar::Script script) const
|
||||||
{
|
{
|
||||||
QStringList result = QPlatformFontDatabase::fallbacksForFamily(family, style, styleHint, script);
|
QStringList result;
|
||||||
if (!result.isEmpty())
|
|
||||||
return result;
|
|
||||||
|
|
||||||
result.append(QWindowsFontDatabase::familyForStyleHint(styleHint));
|
result.append(QWindowsFontDatabase::familyForStyleHint(styleHint));
|
||||||
|
|
||||||
@ -679,6 +677,8 @@ QStringList QWindowsFontDatabaseFT::fallbacksForFamily(const QString &family, QF
|
|||||||
|
|
||||||
result.append(QWindowsFontDatabase::extraTryFontsForFamily(family));
|
result.append(QWindowsFontDatabase::extraTryFontsForFamily(family));
|
||||||
|
|
||||||
|
result.append(QPlatformFontDatabase::fallbacksForFamily(family, style, styleHint, script));
|
||||||
|
|
||||||
qCDebug(lcQpaFonts) << __FUNCTION__ << family << style << styleHint
|
qCDebug(lcQpaFonts) << __FUNCTION__ << family << style << styleHint
|
||||||
<< script << result;
|
<< script << result;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user