From: Jactry Zeng jzeng@codeweavers.com
Signed-off-by: Jactry Zeng jzeng@codeweavers.com --- dlls/riched20/wrap.c | 51 +++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 50 insertions(+), 1 deletion(-)
diff --git a/dlls/riched20/wrap.c b/dlls/riched20/wrap.c index 0748cb0b2d5..9ea507511b2 100644 --- a/dlls/riched20/wrap.c +++ b/dlls/riched20/wrap.c @@ -61,16 +61,65 @@ static BOOL get_run_glyph_buffers( ME_Run *run ) return TRUE; }
+static WCHAR hang_font[LF_FACESIZE] = L"Gulim"; +static WCHAR hani_font[LF_FACESIZE] = L"Simsun"; +static WCHAR kana_font[LF_FACESIZE] = L"MS UI Gothic"; +static BOOL fallbacks_initialized = FALSE; + struct richedit_fallback { OPENTYPE_TAG script_tag; WCHAR *font_name; -} richedit_fallbacks[] = {}; +} richedit_fallbacks[] = +{ + { MAKE_OPENTYPE_TAG( 'h','a','n','g' ), hang_font }, + { MAKE_OPENTYPE_TAG( 'h','a','n','i' ), hani_font }, + { MAKE_OPENTYPE_TAG( 'k','a','n','a' ), kana_font }, +}; + +static void init_richedit_fallbacks( void ) +{ + LCID lcid; + + if (fallbacks_initialized) + return; + + /* Setting proper font for "hani". */ + lcid = GetSystemDefaultLangID(); + switch (PRIMARYLANGID( lcid )) + { + case LANG_CHINESE: + { + switch (SUBLANGID( lcid )) + { + case SUBLANG_CHINESE_HONGKONG: + case SUBLANG_CHINESE_MACAU: + case SUBLANG_CHINESE_TRADITIONAL: + lstrcpyW( hani_font, L"PMingLiU" ); + break; + case SUBLANG_CHINESE_SIMPLIFIED: + lstrcpyW( hani_font, L"Simsun" ); + break; + } + break; + } + case LANG_JAPANESE: + lstrcpyW( hani_font, L"MS UI Gothic" ); + break; + case LANG_KOREAN: + lstrcpyW( hani_font, L"Gulim" ); + break; + } + + fallbacks_initialized = TRUE; +}
static const WCHAR *find_fallback_font( OPENTYPE_TAG script_tag ) { int count;
+ init_richedit_fallbacks(); + count = ARRAYSIZE( richedit_fallbacks ); while (count--) if (richedit_fallbacks[count].script_tag == script_tag)