[3/3] gdi32: Check if a character is double byte or single byte.
Kusanagi Kouichi
slash at ac.auone-net.jp
Thu Feb 3 05:07:06 CST 2011
Signed-off-by: Kusanagi Kouichi <slash at ac.auone-net.jp>
---
dlls/gdi32/font.c | 22 +++++++++-------------
dlls/gdi32/tests/font.c | 1 -
2 files changed, 9 insertions(+), 14 deletions(-)
diff --git a/dlls/gdi32/font.c b/dlls/gdi32/font.c
index 6f1f867..c92b6e3 100644
--- a/dlls/gdi32/font.c
+++ b/dlls/gdi32/font.c
@@ -2495,16 +2495,15 @@ DWORD WINAPI GetGlyphOutlineA( HDC hdc, UINT uChar, UINT fuFormat,
LPGLYPHMETRICS lpgm, DWORD cbBuffer,
LPVOID lpBuffer, const MAT2 *lpmat2 )
{
- LPWSTR p = NULL;
- DWORD ret;
- UINT c;
-
if (!lpmat2) return GDI_ERROR;
if(!(fuFormat & GGO_GLYPH_INDEX)) {
+ UINT cp;
int len;
char mbchs[2];
- if(uChar > 0xff) { /* but, 2 bytes character only */
+
+ cp = GdiGetCodePage(hdc);
+ if (IsDBCSLeadByteEx(cp, uChar >> 8)) {
len = 2;
mbchs[0] = (uChar & 0xff00) >> 8;
mbchs[1] = (uChar & 0xff);
@@ -2512,14 +2511,11 @@ DWORD WINAPI GetGlyphOutlineA( HDC hdc, UINT uChar, UINT fuFormat,
len = 1;
mbchs[0] = (uChar & 0xff);
}
- p = FONT_mbtowc(hdc, mbchs, len, NULL, NULL);
- c = p[0];
- } else
- c = uChar;
- ret = GetGlyphOutlineW(hdc, c, fuFormat, lpgm, cbBuffer, lpBuffer,
- lpmat2);
- HeapFree(GetProcessHeap(), 0, p);
- return ret;
+ MultiByteToWideChar(cp, 0, mbchs, len, (LPWSTR)&uChar, 1);
+ }
+
+ return GetGlyphOutlineW(hdc, uChar, fuFormat, lpgm, cbBuffer, lpBuffer,
+ lpmat2);
}
/***********************************************************************
diff --git a/dlls/gdi32/tests/font.c b/dlls/gdi32/tests/font.c
index 5b7cb8d..3ea883a 100644
--- a/dlls/gdi32/tests/font.c
+++ b/dlls/gdi32/tests/font.c
@@ -3194,7 +3194,6 @@ static void test_GetGlyphOutline(void)
ret = GetGlyphOutlineA(hdc, 0x8041, GGO_BITMAP, &gm, 0, NULL, &mat);
ret2 = GetGlyphOutlineA(hdc, 0x41, GGO_BITMAP, &gm2, 0, NULL, &mat);
- todo_wine
ok(ret == ret2 && memcmp(&gm, &gm2, sizeof gm) == 0, "%d %d\n", ret, ret2);
ret = GetGlyphOutlineA(hdc, c[i].a, GGO_BITMAP, &gm, 0, NULL, &mat);
--
1.7.2.3
More information about the wine-patches
mailing list