From 44589c6f8fdf511f4131da4d488204f1aef41c4f Mon Sep 17 00:00:00 2001 From: Dmitry Timoshkov Date: Tue, 3 Feb 2009 17:55:05 +0800 Subject: [PATCH] gdi32: The MAT2 parameter of GetGlyphOutline is mandatory. --- dlls/gdi32/gdi16.c | 15 +++++++++------ dlls/gdi32/path.c | 5 +++-- 2 files changed, 12 insertions(+), 8 deletions(-) diff --git a/dlls/gdi32/gdi16.c b/dlls/gdi32/gdi16.c index b70b44ed04e..1d0344bbd92 100644 --- a/dlls/gdi32/gdi16.c +++ b/dlls/gdi32/gdi16.c @@ -1983,12 +1983,15 @@ DWORD WINAPI GetGlyphOutline16( HDC16 hdc, UINT16 uChar, UINT16 fuFormat, GLYPHMETRICS gm32; ret = GetGlyphOutlineA( HDC_32(hdc), uChar, fuFormat, &gm32, cbBuffer, lpBuffer, lpmat2); - lpgm->gmBlackBoxX = gm32.gmBlackBoxX; - lpgm->gmBlackBoxY = gm32.gmBlackBoxY; - lpgm->gmptGlyphOrigin.x = gm32.gmptGlyphOrigin.x; - lpgm->gmptGlyphOrigin.y = gm32.gmptGlyphOrigin.y; - lpgm->gmCellIncX = gm32.gmCellIncX; - lpgm->gmCellIncY = gm32.gmCellIncY; + if (ret && ret != GDI_ERROR) + { + lpgm->gmBlackBoxX = gm32.gmBlackBoxX; + lpgm->gmBlackBoxY = gm32.gmBlackBoxY; + lpgm->gmptGlyphOrigin.x = gm32.gmptGlyphOrigin.x; + lpgm->gmptGlyphOrigin.y = gm32.gmptGlyphOrigin.y; + lpgm->gmCellIncX = gm32.gmCellIncX; + lpgm->gmCellIncY = gm32.gmCellIncY; + } return ret; } diff --git a/dlls/gdi32/path.c b/dlls/gdi32/path.c index 8df8a1bb2d6..3ad551e8bb3 100644 --- a/dlls/gdi32/path.c +++ b/dlls/gdi32/path.c @@ -1454,17 +1454,18 @@ BOOL PATH_ExtTextOut(DC *dc, INT x, INT y, UINT flags, const RECT *lprc, for (idx = 0; idx < count; idx++) { + static const MAT2 identity = { {0,1},{0,0},{0,0},{0,1} }; GLYPHMETRICS gm; DWORD dwSize; void *outline; - dwSize = GetGlyphOutlineW(hdc, str[idx], GGO_GLYPH_INDEX | GGO_NATIVE, &gm, 0, NULL, NULL); + dwSize = GetGlyphOutlineW(hdc, str[idx], GGO_GLYPH_INDEX | GGO_NATIVE, &gm, 0, NULL, &identity); if (!dwSize) return FALSE; outline = HeapAlloc(GetProcessHeap(), 0, dwSize); if (!outline) return FALSE; - GetGlyphOutlineW(hdc, str[idx], GGO_GLYPH_INDEX | GGO_NATIVE, &gm, dwSize, outline, NULL); + GetGlyphOutlineW(hdc, str[idx], GGO_GLYPH_INDEX | GGO_NATIVE, &gm, dwSize, outline, &identity); PATH_add_outline(dc, org.x + x + xoff, org.x + y + yoff, outline, dwSize);