Module: wine Branch: master Commit: 80dbd4e9cf561c6d21723ca25782b3c8f5326460 URL: http://source.winehq.org/git/wine.git/?a=commit;h=80dbd4e9cf561c6d21723ca257...
Author: Qian Hong fracting@gmail.com Date: Tue Sep 11 01:05:57 2012 +0800
gdi32: Fixed localized font style name.
---
dlls/gdi32/freetype.c | 26 ++++++++++++++++++++------ dlls/gdi32/tests/font.c | 7 ++++++- 2 files changed, 26 insertions(+), 7 deletions(-)
diff --git a/dlls/gdi32/freetype.c b/dlls/gdi32/freetype.c index 28ca616..efb12a4 100644 --- a/dlls/gdi32/freetype.c +++ b/dlls/gdi32/freetype.c @@ -1714,7 +1714,14 @@ static Face *create_face( FT_Face ft_face, FT_Long face_index, const char *file, Face *face = HeapAlloc( GetProcessHeap(), 0, sizeof(*face) ); My_FT_Bitmap_Size *size = (My_FT_Bitmap_Size *)ft_face->available_sizes;
- face->StyleName = towstr( CP_ACP, ft_face->style_name ); + face->StyleName = get_face_name( ft_face, TT_NAME_ID_FONT_SUBFAMILY, GetSystemDefaultLangID() ); + if (!face->StyleName) + face->StyleName = get_face_name( ft_face, TT_NAME_ID_FONT_SUBFAMILY, TT_MS_LANGID_ENGLISH_UNITED_STATES ); + if (!face->StyleName) + { + face->StyleName = towstr( CP_ACP, ft_face->style_name ); + } + face->FullName = get_face_name( ft_face, TT_NAME_ID_FULL_NAME, GetSystemDefaultLangID() ); if (!face->FullName) face->FullName = get_face_name( ft_face, TT_NAME_ID_FULL_NAME, TT_MS_LANGID_ENGLISH_UNITED_STATES ); @@ -6549,11 +6556,18 @@ static BOOL get_outline_text_metrics(GdiFont *font) lenfam = (strlenW(font->name) + 1) * sizeof(WCHAR); family_nameW = strdupW(font->name);
- lensty = MultiByteToWideChar(CP_ACP, 0, ft_face->style_name, -1, NULL, 0) - * sizeof(WCHAR); - style_nameW = HeapAlloc(GetProcessHeap(), 0, lensty); - MultiByteToWideChar(CP_ACP, 0, ft_face->style_name, -1, - style_nameW, lensty/sizeof(WCHAR)); + style_nameW = get_face_name( ft_face, TT_NAME_ID_FONT_SUBFAMILY, GetSystemDefaultLangID() ); + if (!style_nameW) + style_nameW = get_face_name( ft_face, TT_NAME_ID_FONT_SUBFAMILY, TT_MS_LANGID_ENGLISH_UNITED_STATES ); + if (!style_nameW) + { + FIXME("failed to read sytle_nameW for font %s!\n", wine_dbgstr_w(font->name)); + lensty = MultiByteToWideChar(CP_ACP, 0, ft_face->style_name, -1, NULL, 0) * sizeof(WCHAR); + style_nameW = HeapAlloc(GetProcessHeap(), 0, lensty); + MultiByteToWideChar(CP_ACP, 0, ft_face->style_name, -1, style_nameW, lensty/sizeof(WCHAR)); + } + else + lensty = (strlenW(style_nameW) + 1) * sizeof(WCHAR);
face_nameW = get_face_name( ft_face, TT_NAME_ID_FULL_NAME, GetSystemDefaultLangID() ); if (!face_nameW) diff --git a/dlls/gdi32/tests/font.c b/dlls/gdi32/tests/font.c index bbfa02b..07f8dcb 100644 --- a/dlls/gdi32/tests/font.c +++ b/dlls/gdi32/tests/font.c @@ -4132,7 +4132,12 @@ static void test_fullname2_helper(const char *Family)
bufW[0] = 0; bufA[0] = 0; - ret = get_ttf_nametable_entry(hdc, TT_NAME_ID_FONT_SUBFAMILY, bufW, buf_size, TT_MS_LANGID_ENGLISH_UNITED_STATES); + ret = get_ttf_nametable_entry(hdc, TT_NAME_ID_FONT_SUBFAMILY, bufW, buf_size, GetSystemDefaultLangID()); + if (!ret) + { + trace("no localized FONT_SUBFAMILY font.\n"); + ret = get_ttf_nametable_entry(hdc, TT_NAME_ID_FONT_SUBFAMILY, bufW, buf_size, TT_MS_LANGID_ENGLISH_UNITED_STATES); + } ok(ret, "SUBFAMILY (style name) could not be read\n"); WideCharToMultiByte(CP_ACP, 0, bufW, -1, bufA, buf_size, NULL, FALSE); ok(!lstrcmpA(StyleName, bufA), "style names don't match: returned %s, expect %s\n", StyleName, bufA);