diff options
Diffstat (limited to 'src/plugins/platforms/windows/qwindowsfontengine.cpp')
-rw-r--r-- | src/plugins/platforms/windows/qwindowsfontengine.cpp | 17 |
1 files changed, 16 insertions, 1 deletions
diff --git a/src/plugins/platforms/windows/qwindowsfontengine.cpp b/src/plugins/platforms/windows/qwindowsfontengine.cpp index 94072622eb..f4bd3f0c53 100644 --- a/src/plugins/platforms/windows/qwindowsfontengine.cpp +++ b/src/plugins/platforms/windows/qwindowsfontengine.cpp @@ -44,6 +44,7 @@ #define _WIN32_WINNT 0x0500 #endif +#include "qwindowsintegration.h" #include "qwindowsfontengine.h" #include "qwindowsnativeimage.h" #include "qwindowscontext.h" @@ -319,6 +320,11 @@ QWindowsFontEngine::~QWindowsFontEngine() if (QWindowsContext::verboseFonts) if (QWindowsContext::verboseFonts) qDebug("%s: font='%s", __FUNCTION__, qPrintable(_name)); + + if (!uniqueFamilyName.isEmpty()) { + QPlatformFontDatabase *pfdb = QWindowsIntegration::instance()->fontDatabase(); + static_cast<QWindowsFontDatabase *>(pfdb)->derefUniqueFont(uniqueFamilyName); + } } HGDIOBJ QWindowsFontEngine::selectDesignFont() const @@ -1133,14 +1139,23 @@ QFontEngine *QWindowsFontEngine::cloneWithSize(qreal pixelSize) const if (!uniqueFamilyName.isEmpty()) request.family = uniqueFamilyName; request.pixelSize = pixelSize; + // Disable font merging, as otherwise createEngine will return a multi-engine + // instance instead of the specific engine we wish to clone. + request.styleStrategy |= QFont::NoFontMerging; QFontEngine *fontEngine = QWindowsFontDatabase::createEngine(QUnicodeTables::Common, request, 0, QWindowsContext::instance()->defaultDPI(), false, QStringList(), m_fontEngineData); - if (fontEngine) + if (fontEngine) { fontEngine->fontDef.family = actualFontName; + if (!uniqueFamilyName.isEmpty()) { + static_cast<QWindowsFontEngine *>(fontEngine)->setUniqueFamilyName(uniqueFamilyName); + QPlatformFontDatabase *pfdb = QWindowsIntegration::instance()->fontDatabase(); + static_cast<QWindowsFontDatabase *>(pfdb)->refUniqueFont(uniqueFamilyName); + } + } return fontEngine; } |