Module: wine Branch: master Commit: 80e30f3d1b8ad9a96bd48668119b1f8978c99981 URL: http://source.winehq.org/git/wine.git/?a=commit;h=80e30f3d1b8ad9a96bd4866811...
Author: Hans Leidekker hans@it.vu.nl Date: Tue Jan 2 14:18:31 2007 +0100
gdi32: Implement GetCharWidthI.
---
dlls/gdi32/font.c | 39 ++++++++++++++++++++++++++++++++++++--- include/wingdi.h | 1 + 2 files changed, 37 insertions(+), 3 deletions(-)
diff --git a/dlls/gdi32/font.c b/dlls/gdi32/font.c index b92ea82..527a0d9 100644 --- a/dlls/gdi32/font.c +++ b/dlls/gdi32/font.c @@ -3186,11 +3186,44 @@ BOOL WINAPI EnableEUDC(BOOL fEnableEUDC)
/*********************************************************************** * GetCharWidthI (GDI32.@) + * + * Retrieve widths of characters. + * + * PARAMS + * hdc [I] Handle to a device context. + * first [I] First glyph in range to query. + * count [I] Number of glyph indices to query. + * glyphs [I] Array of glyphs to query. + * buffer [O] Buffer to receive character widths. + * + * NOTES + * Only works with TrueType fonts. + * + * RETURNS + * Success: TRUE + * Failure: FALSE */ -BOOL WINAPI GetCharWidthI(HDC hdc, UINT giFirst, UINT cgi, LPWORD pgi, LPINT lpBuffer) +BOOL WINAPI GetCharWidthI(HDC hdc, UINT first, UINT count, LPWORD glyphs, LPINT buffer) { - FIXME("(%p, %d, %d, %p, %p): stub\n", hdc, giFirst, cgi, pgi, lpBuffer); - return FALSE; + ABC *abc; + unsigned int i; + + TRACE("(%p, %d, %d, %p, %p)\n", hdc, first, count, glyphs, buffer); + + if (!(abc = HeapAlloc(GetProcessHeap(), 0, count * sizeof(ABC)))) + return FALSE; + + if (!GetCharABCWidthsI(hdc, first, count, glyphs, abc)) + { + HeapFree(GetProcessHeap(), 0, abc); + return FALSE; + } + + for (i = 0; i < count; i++) + buffer[i] = abc->abcA + abc->abcB + abc->abcC; + + HeapFree(GetProcessHeap(), 0, abc); + return TRUE; }
/*********************************************************************** diff --git a/include/wingdi.h b/include/wingdi.h index 34b54eb..a357c77 100644 --- a/include/wingdi.h +++ b/include/wingdi.h @@ -3423,6 +3423,7 @@ BOOL WINAPI GetCharWidth32A(HDC,U BOOL WINAPI GetCharWidth32W(HDC,UINT,UINT,LPINT); #define GetCharWidth32 WINELIB_NAME_AW(GetCharWidth32) BOOL WINAPI GetCharWidthA(HDC,UINT,UINT,LPINT); +BOOL WINAPI GetCharWidthI(HDC,UINT,UINT,LPWORD,LPINT); BOOL WINAPI GetCharWidthW(HDC,UINT,UINT,LPINT); #define GetCharWidth WINELIB_NAME_AW(GetCharWidth) BOOL WINAPI GetCharWidthFloatA(HDC,UINT,UINT,PFLOAT);