diff options
author | Andreas Holzammer <andreas.holzammer@kdab.com> | 2012-08-20 11:25:41 +0200 |
---|---|---|
committer | Qt by Nokia <qt-info@nokia.com> | 2012-08-20 12:25:03 +0200 |
commit | f2fabf77f9bc18448aed0e99a6d7d1d6c5c9c736 (patch) | |
tree | aaacf638df625932228c72ace6111a69a46abebb /src/plugins | |
parent | 806dda08d685bc5f9ed71dfe8b61f21848d48066 (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.cpp | 47 |
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; |