From: Jactry Zeng <jzeng(a)codeweavers.com>
Signed-off-by: Jactry Zeng <jzeng(a)codeweavers.com>
---
dlls/riched20/wrap.c | 65 +++++++++++++++++++++++++++++++++++++++++++-
1 file changed, 64 insertions(+), 1 deletion(-)
diff --git a/dlls/riched20/wrap.c b/dlls/riched20/wrap.c
index da077045189..dceb8cf9cdf 100644
--- a/dlls/riched20/wrap.c
+++ b/dlls/riched20/wrap.c
@@ -61,16 +61,79 @@ 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;
+static CRITICAL_SECTION fallbacks_cs;
+static CRITICAL_SECTION_DEBUG critsect_debug =
+{
+ 0, 0, &fallbacks_cs,
+ { &critsect_debug.ProcessLocksList, &critsect_debug.ProcessLocksList },
+ 0, 0, { (DWORD_PTR)(__FILE__ ": fallbacks_cs") }
+};
+static CRITICAL_SECTION fallbacks_cs = { &critsect_debug, -1, 0, 0, 0, 0 };
+
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;
+
+ EnterCriticalSection( &fallbacks_cs );
+
+ if (fallbacks_initialized)
+ {
+ LeaveCriticalSection( &fallbacks_cs );
+ 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:
+ wcscpy( hani_font, L"PMingLiU" );
+ break;
+ case SUBLANG_CHINESE_SIMPLIFIED:
+ wcscpy( hani_font, L"Simsun" );
+ break;
+ }
+ break;
+ }
+ case LANG_JAPANESE:
+ wcscpy( hani_font, L"MS UI Gothic" );
+ break;
+ case LANG_KOREAN:
+ wcscpy( hani_font, L"Gulim" );
+ break;
+ }
+
+ fallbacks_initialized = TRUE;
+ LeaveCriticalSection( &fallbacks_cs );
+}
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)
--
GitLab
https://gitlab.winehq.org/wine/wine/-/merge_requests/417