diff --git a/Source/engine/render/text_render.cpp b/Source/engine/render/text_render.cpp index 003209d82..511d01113 100644 --- a/Source/engine/render/text_render.cpp +++ b/Source/engine/render/text_render.cpp @@ -31,7 +31,8 @@ constexpr char32_t ZWSP = U'\u200B'; // Zero-width space std::unordered_map Fonts; std::unordered_map> FontKerns; std::array FontSizes = { 12, 24, 30, 42, 46, 22 }; -std::array FontFullwidth = { 17, 21, 29, 41, 43, 16 }; +std::array CJKWidth = { 17, 24, 28, 41, 47, 16 }; +std::array HangulWidth = { 17, 22, 26, 38, 42, 16 }; std::array LineHeights = { 12, 26, 38, 42, 50, 22 }; std::array BaseLineOffset = { -3, -2, -3, -6, -7, 3 }; @@ -104,12 +105,17 @@ text_color GetColorFromFlags(UiFlags flags) return ColorWhitegold; } -bool IsFullWidth(uint16_t row) +bool IsCJK(uint16_t row) { if (row >= 0x4e && row <= 0x9f) - return true; // CJK Unified Ideographs + return true; + return false; +} + +bool IsHangul(uint16_t row) +{ if (row >= 0xac && row <= 0xd7) - return true; // Hangul Syllables + return true; return false; } @@ -127,8 +133,10 @@ std::array *LoadFontKerning(GameFontTables size, uint16_t row) auto *kerning = &FontKerns[fontId]; - if (IsFullWidth(row)) { - kerning->fill(FontFullwidth[size]); + if (IsCJK(row)) { + kerning->fill(CJKWidth[size]); + } else if (IsHangul(row)) { + kerning->fill(HangulWidth[size]); } else { SDL_RWops *handle = OpenAsset(path); if (handle != nullptr) { @@ -136,7 +144,7 @@ std::array *LoadFontKerning(GameFontTables size, uint16_t row) SDL_RWclose(handle); } else { LogError("Missing font kerning: {}", path); - kerning->fill(FontFullwidth[size]); + kerning->fill(CJKWidth[size]); } }