summaryrefslogtreecommitdiffstats
path: root/src/plugins
diff options
context:
space:
mode:
authorAndreas Holzammer <andreas.holzammer@kdab.com>2012-08-20 11:25:41 +0200
committerQt by Nokia <qt-info@nokia.com>2012-08-20 12:25:03 +0200
commitf2fabf77f9bc18448aed0e99a6d7d1d6c5c9c736 (patch)
treeaaacf638df625932228c72ace6111a69a46abebb /src/plugins
parent806dda08d685bc5f9ed71dfe8b61f21848d48066 (diff)
Fix freetype font rendering for Windows CE
Windows CE does not have support for GetGlyphOutline. So addGlyphToPath will not work. QML uses it for their distance field rendering. One option to bypass this issue is to use freetype as rendering backend. Change-Id: I965254344945cbdad771a5d505fb61c1cc2087df Reviewed-by: Friedemann Kleint <Friedemann.Kleint@nokia.com>
Diffstat (limited to 'src/plugins')
-rw-r--r--src/plugins/platforms/windows/qwindowsfontdatabase_ft.cpp47
1 files changed, 47 insertions, 0 deletions
diff --git a/src/plugins/platforms/windows/qwindowsfontdatabase_ft.cpp b/src/plugins/platforms/windows/qwindowsfontdatabase_ft.cpp
index ab85b58ce0..7d72e10417 100644
--- a/src/plugins/platforms/windows/qwindowsfontdatabase_ft.cpp
+++ b/src/plugins/platforms/windows/qwindowsfontdatabase_ft.cpp
@@ -47,6 +47,7 @@
#include FT_TRUETYPE_TABLES_H
#include <QtCore/QDir>
+#include <QtCore/QDirIterator>
#include <QtCore/QSettings>
#include <QtGui/private/qfontengine_ft_p.h>
#include <QtGui/QGuiApplication>
@@ -189,6 +190,7 @@ static bool addFontToDatabase(QString familyName, const QString &scriptName,
writingSystems.setSupported(ws);
}
+#ifndef Q_OS_WINCE
const QSettings fontRegistry(QStringLiteral("HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Fonts"),
QSettings::NativeFormat);
@@ -225,6 +227,51 @@ static bool addFontToDatabase(QString familyName, const QString &scriptName,
if (!value.isEmpty())
break;
}
+#else
+ QString value;
+ int index = 0;
+
+ static QHash<QString, QString> fontCache;
+
+ if (fontCache.isEmpty()) {
+ QSettings settings(QSettings::SystemScope, QStringLiteral("Qt-Project"), QStringLiteral("Qtbase"));
+ settings.beginGroup(QStringLiteral("CEFontCache"));
+
+ foreach (const QString &fontName, settings.allKeys()) {
+ const QString fontFileName = settings.value(fontName).toString();
+ fontCache.insert(fontName, fontFileName);
+ }
+
+ settings.endGroup(); // CEFontCache
+ }
+
+ value = fontCache.value(faceName);
+
+ //Fallback if we havent cached the font yet or the font got removed/renamed iterate again over all fonts
+ if (value.isEmpty() || !QFile::exists(value)) {
+ QSettings settings(QSettings::SystemScope, QStringLiteral("Qt-Project"), QStringLiteral("Qtbase"));
+ settings.beginGroup(QStringLiteral("CEFontCache"));
+
+ //empty the cache first, as it seems that it is dirty
+ foreach (const QString &fontName, settings.allKeys())
+ settings.remove(fontName);
+
+ QDirIterator it(QStringLiteral("/Windows"), QStringList(QStringLiteral("*.ttf")), QDir::Files | QDir::Hidden | QDir::System);
+
+ while (it.hasNext()) {
+ const QString fontFile = it.next();
+ const QString fontName = QBasicFontDatabase::fontNameFromTTFile(fontFile);
+ if (fontName.isEmpty())
+ continue;
+ fontCache.insert(fontName, fontFile);
+ settings.setValue(fontName, fontFile);
+ }
+
+ value = fontCache.value(faceName);
+
+ settings.endGroup(); // CEFontCache
+ }
+#endif
if (value.isEmpty())
return false;