From cbf476242608a575595651a2eb8c40588a4631a4 Mon Sep 17 00:00:00 2001 From: Miikka Heikkinen Date: Mon, 5 Nov 2012 13:00:34 +0200 Subject: Fix GDI leaks in fontengine GDI objects that are created need to be deleted once no longer needed, instead of just released. Task-number: QTBUG-27812 Task-number: QTBUG-27825 Change-Id: I53b04b54cea9e2aaa8fc72365c215f516c5682e6 Reviewed-by: Friedemann Kleint --- src/plugins/platforms/windows/qwindowsfontdatabase.cpp | 2 +- src/plugins/platforms/windows/qwindowsfontengine.cpp | 7 +++++-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/src/plugins/platforms/windows/qwindowsfontdatabase.cpp b/src/plugins/platforms/windows/qwindowsfontdatabase.cpp index 323cff1646..76fe5f1a43 100644 --- a/src/plugins/platforms/windows/qwindowsfontdatabase.cpp +++ b/src/plugins/platforms/windows/qwindowsfontdatabase.cpp @@ -533,7 +533,7 @@ QWindowsFontEngineData::QWindowsFontEngineData() QWindowsFontEngineData::~QWindowsFontEngineData() { if (hdc) - ReleaseDC(0, hdc); + DeleteDC(hdc); #if !defined(QT_NO_DIRECTWRITE) if (directWriteGdiInterop) directWriteGdiInterop->Release(); diff --git a/src/plugins/platforms/windows/qwindowsfontengine.cpp b/src/plugins/platforms/windows/qwindowsfontengine.cpp index 0e592aee7b..578a0cd20b 100644 --- a/src/plugins/platforms/windows/qwindowsfontengine.cpp +++ b/src/plugins/platforms/windows/qwindowsfontengine.cpp @@ -1110,7 +1110,7 @@ QWindowsNativeImage *QWindowsFontEngine::drawGDIGlyph(HFONT font, glyph_t glyph, SetGraphicsMode(hdc, GM_COMPATIBLE); SelectObject(hdc, old_font); - ReleaseDC(0, hdc); + DeleteDC(hdc); } #else // else wince unsigned int options = 0; @@ -1166,8 +1166,11 @@ QImage QWindowsFontEngine::alphaMapForGlyph(glyph_t glyph, const QTransform &xfo mask_format = QImage::Format_RGB32; QWindowsNativeImage *mask = drawGDIGlyph(font, glyph, 0, xform, mask_format); - if (mask == 0) + if (mask == 0) { + if (m_fontEngineData->clearTypeEnabled) + DeleteObject(font); return QImage(); + } QImage indexed(mask->width(), mask->height(), QImage::Format_Indexed8); -- cgit v1.2.3