Module: wine Branch: master Commit: 882398b0a9f4bae83a2ca1cdf576289c8938fc79 URL: http://source.winehq.org/git/wine.git/?a=commit;h=882398b0a9f4bae83a2ca1cdf5...
Author: Akihiro Sagawa sagawa.aki@gmail.com Date: Wed Dec 11 21:11:15 2013 +0900
gdi32: Return ANSI character code as glyph index for bitmap fonts.
---
dlls/gdi32/freetype.c | 32 ++++++++++++++++++++++++++++++-- 1 files changed, 30 insertions(+), 2 deletions(-)
diff --git a/dlls/gdi32/freetype.c b/dlls/gdi32/freetype.c index cbaddd2..716c74d 100644 --- a/dlls/gdi32/freetype.c +++ b/dlls/gdi32/freetype.c @@ -5998,7 +5998,7 @@ static FT_UInt get_glyph_index(const GdiFont *font, UINT glyph) } else ret = pFT_Get_Char_Index(font->ft_face, (unsigned char)buf); - TRACE("%04x (%02x) -> ret %d def_used %d\n", glyph, buf, ret, default_used); + TRACE("%04x (%02x) -> ret %d def_used %d\n", glyph, (unsigned char)buf, ret, default_used); return ret; }
@@ -6015,6 +6015,34 @@ static FT_UInt get_glyph_index(const GdiFont *font, UINT glyph) return glyphId; }
+/* helper for freetype_GetGlyphIndices */ +static FT_UInt get_gdi_glyph_index(const GdiFont *font, UINT glyph) +{ + WCHAR wc = (WCHAR)glyph; + BOOL default_used = FALSE; + BOOL *default_used_pointer = NULL; + FT_UInt ret; + char buf; + + if(font->ft_face->charmap->encoding != FT_ENCODING_NONE) + return get_glyph_index(font, glyph); + + if (codepage_sets_default_used(font->codepage)) + default_used_pointer = &default_used; + if(!WideCharToMultiByte(font->codepage, 0, &wc, 1, &buf, sizeof(buf), NULL, default_used_pointer) + || default_used) + { + if (font->codepage == CP_SYMBOL && wc < 0x100) + ret = (unsigned char)wc; + else + ret = 0; + } + else + ret = (unsigned char)buf; + TRACE("%04x (%02x) -> ret %d def_used %d\n", glyph, (unsigned char)buf, ret, default_used); + return ret; +} + static FT_UInt get_default_char_index(GdiFont *font) { FT_UInt default_char; @@ -6061,7 +6089,7 @@ static DWORD freetype_GetGlyphIndices( PHYSDEV dev, LPCWSTR lpstr, INT count, LP
for(i = 0; i < count; i++) { - pgi[i] = get_glyph_index(physdev->font, lpstr[i]); + pgi[i] = get_gdi_glyph_index(physdev->font, lpstr[i]); if (pgi[i] == 0) { if (!got_default)