Windows: Determine suitable font engine from application.
authorFriedemann Kleint <Friedemann.Kleint@nokia.com>
Thu, 12 Apr 2012 14:30:23 +0000 (16:30 +0200)
committerQt by Nokia <qt-info@nokia.com>
Fri, 13 Apr 2012 16:15:26 +0000 (18:15 +0200)
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>
src/plugins/platforms/windows/qwindowsintegration.cpp

index 6da8932..d8d04fc 100644 (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;