Module: wine Branch: master Commit: 44589c6f8fdf511f4131da4d488204f1aef41c4f URL: http://source.winehq.org/git/wine.git/?a=commit;h=44589c6f8fdf511f4131da4d48...
Author: Dmitry Timoshkov dmitry@codeweavers.com Date: Tue Feb 3 17:55:05 2009 +0800
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 b70b44e..1d0344b 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 8df8a1b..3ad551e 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);