summaryrefslogtreecommitdiffstats
path: root/src/plugins/platforms/windows/qwindowsfontengine.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/platforms/windows/qwindowsfontengine.cpp')
-rw-r--r--src/plugins/platforms/windows/qwindowsfontengine.cpp17
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;
}