diff options
author | Frederik Gladhorn <frederik.gladhorn@digia.com> | 2013-01-29 10:17:53 +0100 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2013-01-29 11:33:35 +0100 |
commit | 3eb588078e7f4d62053584a70f7600b19ec99a0f (patch) | |
tree | 432c6bfcabf44b8fdbc4a8e1ab58054e548a77bf /src/plugins/platforms/windows | |
parent | 7b8ab4204417844e72bb66696227a422f4ef3e2d (diff) | |
parent | 02ba93dd3dc640421c79c655064f0b2c4f1465cd (diff) |
Merge "Merge remote-tracking branch 'origin/stable' into dev" into refs/staging/dev
Diffstat (limited to 'src/plugins/platforms/windows')
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 |