summaryrefslogtreecommitdiffstats
path: root/src/plugins/platforms/windows
diff options
context:
space:
mode:
authorFrederik Gladhorn <frederik.gladhorn@digia.com>2013-01-29 10:17:53 +0100
committerThe Qt Project <gerrit-noreply@qt-project.org>2013-01-29 11:33:35 +0100
commit3eb588078e7f4d62053584a70f7600b19ec99a0f (patch)
tree432c6bfcabf44b8fdbc4a8e1ab58054e548a77bf /src/plugins/platforms/windows
parent7b8ab4204417844e72bb66696227a422f4ef3e2d (diff)
parent02ba93dd3dc640421c79c655064f0b2c4f1465cd (diff)
Merge "Merge remote-tracking branch 'origin/stable' into dev" into refs/staging/dev
Diffstat (limited to 'src/plugins/platforms/windows')
-rw-r--r--src/plugins/platforms/windows/qwindowsfontdatabase.cpp44
-rw-r--r--src/plugins/platforms/windows/qwindowsfontdatabase.h1
-rw-r--r--src/plugins/platforms/windows/qwindowsfontengine.h2
-rw-r--r--src/plugins/platforms/windows/qwindowsintegration.cpp4
4 files changed, 39 insertions, 12 deletions
diff --git a/src/plugins/platforms/windows/qwindowsfontdatabase.cpp b/src/plugins/platforms/windows/qwindowsfontdatabase.cpp
index a3ec31a243..c1c906523f 100644
--- a/src/plugins/platforms/windows/qwindowsfontdatabase.cpp
+++ b/src/plugins/platforms/windows/qwindowsfontdatabase.cpp
@@ -52,6 +52,7 @@
#include <QtCore/qmath.h>
#include <QtCore/QDebug>
#include <QtCore/QtEndian>
+#include <QtCore/QThreadStorage>
#include <wchar.h>
@@ -1112,19 +1113,46 @@ void QWindowsFontDatabase::populate(const QString &family)
ReleaseDC(0, dummy);
}
-QWindowsFontDatabase::QWindowsFontDatabase() :
- m_fontEngineData(new QWindowsFontEngineData)
+typedef QSharedPointer<QWindowsFontEngineData> QWindowsFontEngineDataPtr;
+
+#ifndef QT_NO_THREAD
+typedef QThreadStorage<QWindowsFontEngineDataPtr> FontEngineThreadLocalData;
+
+Q_GLOBAL_STATIC(FontEngineThreadLocalData, fontEngineThreadLocalData)
+
+QSharedPointer<QWindowsFontEngineData> sharedFontData()
+{
+ FontEngineThreadLocalData *data = fontEngineThreadLocalData();
+ if (!data->hasLocalData())
+ data->setLocalData(QSharedPointer<QWindowsFontEngineData>(new QWindowsFontEngineData));
+ return data->localData();
+}
+#else // !QT_NO_THREAD
+Q_GLOBAL_STATIC(QWindowsFontEngineDataPtr, fontEngineData)
+
+QWindowsFontEngineDataPtr sharedFontData()
{
- // Properties accessed by QWin32PrintEngine (QtPrintSupport)
+ QWindowsFontEngineDataPtr *data = fontEngineData();
+ if (data->isNull())
+ *data = QWindowsFontEngineDataPtr(new QWindowsFontEngineData);
+ return *data;
+}
+#endif // QT_NO_THREAD
+
+QWindowsFontDatabase::QWindowsFontDatabase()
+{
+ // Properties accessed by QWin32PrintEngine (Qt Print Support)
static const int hfontMetaTypeId = qRegisterMetaType<HFONT>();
static const int logFontMetaTypeId = qRegisterMetaType<LOGFONT>();
Q_UNUSED(hfontMetaTypeId)
Q_UNUSED(logFontMetaTypeId)
- if (QWindowsContext::verboseFonts)
+ if (QWindowsContext::verboseFonts) {
+ const QWindowsFontEngineDataPtr data = sharedFontData();
qDebug() << __FUNCTION__ << "Clear type: "
- << m_fontEngineData->clearTypeEnabled << "gamma: "
- << m_fontEngineData->fontSmoothingGamma;
+ << data->clearTypeEnabled << "gamma: "
+ << data->fontSmoothingGamma;
+ }
}
QWindowsFontDatabase::~QWindowsFontDatabase()
@@ -1136,7 +1164,7 @@ QFontEngine * QWindowsFontDatabase::fontEngine(const QFontDef &fontDef, QChar::S
{
QFontEngine *fe = QWindowsFontDatabase::createEngine(script, fontDef,
0, QWindowsContext::instance()->defaultDPI(), false,
- QStringList(), m_fontEngineData);
+ QStringList(), sharedFontData());
if (QWindowsContext::verboseFonts)
qDebug() << __FUNCTION__ << "FONTDEF" << fontDef << script << fe << handle;
return fe;
@@ -1187,7 +1215,7 @@ QFontEngine *QWindowsFontDatabase::fontEngine(const QByteArray &fontData, qreal
fontEngine = QWindowsFontDatabase::createEngine(QChar::Script_Common, request, 0,
QWindowsContext::instance()->defaultDPI(), false, QStringList(),
- m_fontEngineData);
+ sharedFontData());
if (fontEngine) {
if (request.family != fontEngine->fontDef.family) {
diff --git a/src/plugins/platforms/windows/qwindowsfontdatabase.h b/src/plugins/platforms/windows/qwindowsfontdatabase.h
index 0b01a15e5d..b9e6c38eaa 100644
--- a/src/plugins/platforms/windows/qwindowsfontdatabase.h
+++ b/src/plugins/platforms/windows/qwindowsfontdatabase.h
@@ -106,7 +106,6 @@ public:
private:
void populate(const QString &family = QString());
void removeApplicationFonts();
- QSharedPointer<QWindowsFontEngineData> m_fontEngineData;
QSet<QString> m_families;
struct WinApplicationFont {
diff --git a/src/plugins/platforms/windows/qwindowsfontengine.h b/src/plugins/platforms/windows/qwindowsfontengine.h
index 8c646aff07..2bf6ead503 100644
--- a/src/plugins/platforms/windows/qwindowsfontengine.h
+++ b/src/plugins/platforms/windows/qwindowsfontengine.h
@@ -135,7 +135,7 @@ public:
const QSharedPointer<QWindowsFontEngineData> &fontEngineData() const { return m_fontEngineData; }
- // Properties accessed by QWin32PrintEngine (QtPrintSupport)
+ // Properties accessed by QWin32PrintEngine (Qt Print Support)
LOGFONT logFont() const { return m_logfont; }
HFONT hFont() const { return hfont; }
bool trueType() const { return ttf; }
diff --git a/src/plugins/platforms/windows/qwindowsintegration.cpp b/src/plugins/platforms/windows/qwindowsintegration.cpp
index b8369f8bdd..3c6fcca813 100644
--- a/src/plugins/platforms/windows/qwindowsintegration.cpp
+++ b/src/plugins/platforms/windows/qwindowsintegration.cpp
@@ -456,10 +456,10 @@ QPlatformOpenGLContext
#ifdef Q_OS_WINCE
// It's not easy to detect if we are running a QML application
-// Let's try to do so by checking if the QtQuick module is loaded.
+// Let's try to do so by checking if the Qt Quick module is loaded.
inline bool isQMLApplication()
{
- // check if the QtQuick library is loaded
+ // check if the Qt Quick module is loaded
#ifdef _DEBUG
HMODULE handle = GetModuleHandle(L"Qt5Quick" QT_LIBINFIX L"d.dll");
#else