diff --git a/dlls/gdi32/font.c b/dlls/gdi32/font.c index 6905d21751b..4d6f11d5080 100644 --- a/dlls/gdi32/font.c +++ b/dlls/gdi32/font.c @@ -6937,59 +6937,6 @@ DWORD WINAPI GetGlyphIndicesW(HDC hdc, LPCWSTR lpstr, INT count, return ret; } -/************************************************************************* - * GetCharacterPlacementA [GDI32.@] - * - * See GetCharacterPlacementW. - * - * NOTES: - * the web browser control of ie4 calls this with dwFlags=0 - */ -DWORD WINAPI -GetCharacterPlacementA(HDC hdc, LPCSTR lpString, INT uCount, - INT nMaxExtent, GCP_RESULTSA *lpResults, - DWORD dwFlags) -{ - WCHAR *lpStringW; - INT uCountW; - GCP_RESULTSW resultsW; - DWORD ret; - UINT font_cp; - - TRACE("%s, %d, %d, 0x%08x\n", - debugstr_an(lpString, uCount), uCount, nMaxExtent, dwFlags); - - lpStringW = FONT_mbtowc(hdc, lpString, uCount, &uCountW, &font_cp); - - if (!lpResults) - { - ret = GetCharacterPlacementW(hdc, lpStringW, uCountW, nMaxExtent, NULL, dwFlags); - HeapFree(GetProcessHeap(), 0, lpStringW); - return ret; - } - - /* both structs are equal in size */ - memcpy(&resultsW, lpResults, sizeof(resultsW)); - - if(lpResults->lpOutString) - resultsW.lpOutString = HeapAlloc(GetProcessHeap(), 0, sizeof(WCHAR)*uCountW); - - ret = GetCharacterPlacementW(hdc, lpStringW, uCountW, nMaxExtent, &resultsW, dwFlags); - - lpResults->nGlyphs = resultsW.nGlyphs; - lpResults->nMaxFit = resultsW.nMaxFit; - - if(lpResults->lpOutString) { - WideCharToMultiByte(font_cp, 0, resultsW.lpOutString, uCountW, - lpResults->lpOutString, uCount, NULL, NULL ); - } - - HeapFree(GetProcessHeap(), 0, lpStringW); - HeapFree(GetProcessHeap(), 0, resultsW.lpOutString); - - return ret; -} - /************************************************************************* * GetCharABCWidthsFloatA [GDI32.@] * diff --git a/dlls/gdi32/text.c b/dlls/gdi32/text.c index 66a51e89817..82bf709fe19 100644 --- a/dlls/gdi32/text.c +++ b/dlls/gdi32/text.c @@ -1009,3 +1009,46 @@ DWORD WINAPI GetCharacterPlacementW( HDC hdc, const WCHAR *str, INT count, INT m HeapFree( GetProcessHeap(), 0, kern ); return ret; } + +/************************************************************************* + * GetCharacterPlacementA (GDI32.@) + */ +DWORD WINAPI GetCharacterPlacementA( HDC hdc, const char *str, INT count, INT max_extent, + GCP_RESULTSA *result, DWORD flags ) +{ + GCP_RESULTSW resultsW; + WCHAR *strW; + INT countW; + DWORD ret; + UINT font_cp; + + TRACE( "%s, %d, %d, 0x%08x\n", debugstr_an(str, count), count, max_extent, flags ); + + strW = text_mbtowc( hdc, str, count, &countW, &font_cp ); + + if (!result) + { + ret = GetCharacterPlacementW( hdc, strW, countW, max_extent, NULL, flags ); + HeapFree( GetProcessHeap(), 0, strW ); + return ret; + } + + /* both structs are equal in size */ + memcpy( &resultsW, result, sizeof(resultsW) ); + + if (result->lpOutString) + resultsW.lpOutString = HeapAlloc( GetProcessHeap(), 0, sizeof(WCHAR) * countW ); + + ret = GetCharacterPlacementW( hdc, strW, countW, max_extent, &resultsW, flags ); + + result->nGlyphs = resultsW.nGlyphs; + result->nMaxFit = resultsW.nMaxFit; + + if (result->lpOutString) + WideCharToMultiByte( font_cp, 0, resultsW.lpOutString, countW, + result->lpOutString, count, NULL, NULL ); + + HeapFree( GetProcessHeap(), 0, strW ); + HeapFree( GetProcessHeap(), 0, resultsW.lpOutString ); + return ret; +}