Windows font database: Resolve aliases for extra fonts.
Ensure QFontDataBase::hasFamily() deals with aliases. Task-number: QTBUG-31689 Change-Id: Ia59bfcb93362ac9343c6d30dab1091a4db482dfa Reviewed-by: Konstantin Ritt <ritt.ks@gmail.com>bb10
parent
30f19d904f
commit
bf42eacc7f
|
|
@ -101,6 +101,17 @@ Q_GUI_EXPORT void qt_registerAliasToFontFamily(const QString &familyName, const
|
|||
f->aliases.push_back(alias);
|
||||
}
|
||||
|
||||
QString qt_resolveFontFamilyAlias(const QString &alias)
|
||||
{
|
||||
if (!alias.isEmpty()) {
|
||||
const QFontDatabasePrivate *d = privateDb();
|
||||
for (int i = 0; i < d->count; ++i)
|
||||
if (d->families[i]->matchesFamilyName(alias))
|
||||
return d->families[i]->name;
|
||||
}
|
||||
return alias;
|
||||
}
|
||||
|
||||
static QStringList fallbackFamilies(const QString &family, QFont::Style style, QFont::StyleHint styleHint, QChar::Script script)
|
||||
{
|
||||
QStringList retList = QGuiApplicationPrivate::platformIntegration()->fontDatabase()->fallbacksForFamily(family,style,styleHint,script);
|
||||
|
|
|
|||
|
|
@ -379,9 +379,11 @@ QFont QPlatformFontDatabase::defaultFont() const
|
|||
\since 5.0
|
||||
*/
|
||||
|
||||
QString qt_resolveFontFamilyAlias(const QString &alias);
|
||||
|
||||
QString QPlatformFontDatabase::resolveFontFamilyAlias(const QString &family) const
|
||||
{
|
||||
return family;
|
||||
return qt_resolveFontFamilyAlias(family);
|
||||
}
|
||||
|
||||
/*!
|
||||
|
|
|
|||
|
|
@ -768,6 +768,9 @@ QStringList QFontconfigDatabase::addApplicationFont(const QByteArray &fontData,
|
|||
|
||||
QString QFontconfigDatabase::resolveFontFamilyAlias(const QString &family) const
|
||||
{
|
||||
QString resolved = QBasicFontDatabase::resolveFontFamilyAlias(family);
|
||||
if (!resolved.isEmpty() && resolved != family)
|
||||
return resolved;
|
||||
FcPattern *pattern = FcPatternCreate();
|
||||
if (!pattern)
|
||||
return family;
|
||||
|
|
@ -781,7 +784,7 @@ QString QFontconfigDatabase::resolveFontFamilyAlias(const QString &family) const
|
|||
|
||||
FcChar8 *familyAfterSubstitution = 0;
|
||||
FcPatternGetString(pattern, FC_FAMILY, 0, &familyAfterSubstitution);
|
||||
QString resolved = QString::fromUtf8((const char *) familyAfterSubstitution);
|
||||
resolved = QString::fromUtf8((const char *) familyAfterSubstitution);
|
||||
FcPatternDestroy(pattern);
|
||||
|
||||
return resolved;
|
||||
|
|
|
|||
|
|
@ -1586,11 +1586,14 @@ static QStringList extraTryFontsForFamily(const QString& family)
|
|||
break;
|
||||
}
|
||||
}
|
||||
QStringList fm = QFontDatabase().families();
|
||||
QFontDatabase db;
|
||||
const QStringList families = db.families();
|
||||
const char **tf = tryFonts;
|
||||
while (tf && *tf) {
|
||||
if (fm.contains(QLatin1String(*tf)))
|
||||
result << QLatin1String(*tf);
|
||||
// QTBUG-31689, family might be an English alias for a localized font name.
|
||||
const QString family = QString::fromLatin1(*tf);
|
||||
if (families.contains(family) || db.hasFamily(family))
|
||||
result << family;
|
||||
++tf;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -73,6 +73,8 @@ private slots:
|
|||
|
||||
void addAppFont_data();
|
||||
void addAppFont();
|
||||
|
||||
void aliases();
|
||||
};
|
||||
|
||||
tst_QFontDatabase::tst_QFontDatabase()
|
||||
|
|
@ -268,5 +270,22 @@ void tst_QFontDatabase::addAppFont()
|
|||
QCOMPARE(db.families(), oldFamilies);
|
||||
}
|
||||
|
||||
QT_BEGIN_NAMESPACE
|
||||
Q_GUI_EXPORT void qt_registerAliasToFontFamily(const QString &familyName, const QString &alias);
|
||||
QT_END_NAMESPACE
|
||||
|
||||
void tst_QFontDatabase::aliases()
|
||||
{
|
||||
QFontDatabase db;
|
||||
const QStringList families = db.families();
|
||||
QVERIFY(!families.isEmpty());
|
||||
const QString firstFont = families.front();
|
||||
QVERIFY(db.hasFamily(firstFont));
|
||||
const QString alias = QStringLiteral("AliasToFirstFont") + firstFont;
|
||||
QVERIFY(!db.hasFamily(alias));
|
||||
qt_registerAliasToFontFamily(firstFont, alias);
|
||||
QVERIFY(db.hasFamily(alias));
|
||||
}
|
||||
|
||||
QTEST_MAIN(tst_QFontDatabase)
|
||||
#include "tst_qfontdatabase.moc"
|
||||
|
|
|
|||
Loading…
Reference in New Issue