Windows: Determine suitable font engine from application.

The Freetype engine currently works better for QML2, whereas
the native engine is better suited to the widgets.

Task-number: QTBUG-24205

Change-Id: I76de98c3e7c84a2d72542ea9860b8be1e67f7e04
Reviewed-by: Jan-Arve Sæther <jan-arve.saether@nokia.com>
This commit is contained in:
Friedemann Kleint 2012-04-12 16:30:23 +02:00 committed by Qt by Nokia
parent cdc221ae00
commit 13ebff81d0

View File

@ -277,17 +277,44 @@ QPlatformOpenGLContext
return 0;
}
/* Workaround for QTBUG-24205: In 'Auto', pick the FreeType engine for
* QML2 applications. */
enum FontDatabaseOption {
FontDatabaseAuto,
FontDatabaseFreeType,
FontDatabaseNative
};
static inline FontDatabaseOption fontDatabaseOption(const QObject &nativeInterface)
{
const QVariant argumentV = nativeInterface.property("fontengine");
if (argumentV.isValid()) {
const QString argument = argumentV.toString();
if (argument == QLatin1String("freetype"))
return FontDatabaseFreeType;
if (argument == QLatin1String("native"))
return FontDatabaseNative;
}
return FontDatabaseAuto;
}
QPlatformFontDatabase *QWindowsIntegration::fontDatabase() const
{
if (!d->m_fontDatabase) {
#ifndef QT_NO_FREETYPE
const QVariant argument = d->m_nativeInterface.property("fontengine");
if (argument.isValid() && argument.toString() == QLatin1String("freetype"))
d->m_fontDatabase = new QWindowsFontDatabaseFT();
else
d->m_fontDatabase = new QWindowsFontDatabase();
#else
#ifdef QT_NO_FREETYPE
d->m_fontDatabase = new QWindowsFontDatabase();
#else
FontDatabaseOption option = fontDatabaseOption(d->m_nativeInterface);
if (option == FontDatabaseAuto) {
option = QCoreApplication::applicationName() == QStringLiteral("QtQmlViewer") ?
FontDatabaseFreeType : FontDatabaseNative;
}
if (option == FontDatabaseFreeType) {
d->m_fontDatabase = new QWindowsFontDatabaseFT;
} else {
d->m_fontDatabase = new QWindowsFontDatabase;
}
#endif
}
return d->m_fontDatabase;