diff --git a/Dalamud/Game/Text/SeIconChar.cs b/Dalamud/Game/Text/SeIconChar.cs
index c1be00613..17924c671 100644
--- a/Dalamud/Game/Text/SeIconChar.cs
+++ b/Dalamud/Game/Text/SeIconChar.cs
@@ -611,29 +611,51 @@ public enum SeIconChar
QuestRepeatable = 0xE0BF,
///
- /// The IME hiragana icon unicode character.
+ /// The [あ] character indicating that the Japanese IME is in full-width Hiragana input mode.
///
+ ///
+ /// Half-width Hiragana exists as a Windows API constant, but the feature is unused, or at least unexposed to the end user via the IME.
+ ///
ImeHiragana = 0xE020,
///
- /// The IME katakana icon unicode character.
+ /// The [ア] character indicating that the Japanese IME is in full-width Katakana input mode.
///
ImeKatakana = 0xE021,
///
- /// The IME alphanumeric icon unicode character.
+ /// The [A] character indicating that Japanese or Korean IME is in full-width Latin character input mode.
///
ImeAlphanumeric = 0xE022,
///
- /// The IME katakana half-width icon unicode character.
+ /// The [_ア] character indicating that the Japanese IME is in half-width Katakana input mode.
///
ImeKatakanaHalfWidth = 0xE023,
///
- /// The IME alphanumeric half-width icon unicode character.
+ /// The [_A] character indicating that Japanese or Korean IME is in half-width Latin character input mode.
///
ImeAlphanumericHalfWidth = 0xE024,
+
+ ///
+ /// The [가] character indicating that the Korean IME is in Hangul input mode.
+ ///
+ ///
+ /// Use and for alphanumeric input mode,
+ /// toggled via Alt+=.
+ ///
+ ImeKoreanHangul = 0xE025,
+
+ ///
+ /// The [中] character indicating that the Chinese IME is in Han character input mode.
+ ///
+ ImeChineseHan = 0xE026,
+
+ ///
+ /// The [英] character indicating that the Chinese IME is in Latin character input mode.
+ ///
+ ImeChineseLatin = 0xE027,
///
/// The instance (1) icon unicode character.
diff --git a/Dalamud/Interface/Internal/DalamudIme.cs b/Dalamud/Interface/Internal/DalamudIme.cs
index 286197590..9e0466e66 100644
--- a/Dalamud/Interface/Internal/DalamudIme.cs
+++ b/Dalamud/Interface/Internal/DalamudIme.cs
@@ -19,7 +19,7 @@ using static TerraFX.Interop.Windows.Windows;
namespace Dalamud.Interface.Internal;
///
-/// This class handles IME for non-English users.
+/// This class handles CJK IME.
///
[ServiceManager.EarlyLoadedService]
internal sealed unsafe class DalamudIme : IDisposable, IServiceType
@@ -251,7 +251,7 @@ internal sealed unsafe class DalamudIme : IDisposable, IServiceType
{
case LANG.LANG_KOREAN:
if (native)
- this.InputModeIcon = "\uE025";
+ this.InputModeIcon = $"{(char)SeIconChar.ImeKoreanHangul}";
else if (fullwidth)
this.InputModeIcon = $"{(char)SeIconChar.ImeAlphanumeric}";
else
@@ -274,11 +274,10 @@ internal sealed unsafe class DalamudIme : IDisposable, IServiceType
break;
case LANG.LANG_CHINESE:
- // TODO: does Chinese IME also need "open" check?
if (native)
- this.InputModeIcon = "\uE026";
+ this.InputModeIcon = $"{(char)SeIconChar.ImeChineseHan}";
else
- this.InputModeIcon = "\uE027";
+ this.InputModeIcon = $"{(char)SeIconChar.ImeChineseLatin}";
break;
default:
diff --git a/Dalamud/Interface/Internal/Windows/DalamudImeWindow.cs b/Dalamud/Interface/Internal/Windows/DalamudImeWindow.cs
index 1819ed819..7417afd91 100644
--- a/Dalamud/Interface/Internal/Windows/DalamudImeWindow.cs
+++ b/Dalamud/Interface/Internal/Windows/DalamudImeWindow.cs
@@ -133,6 +133,20 @@ internal unsafe class DalamudImeWindow : Window
if (!expandUpward && drawIme)
{
+ for (var dx = -2; dx <= 2; dx++)
+ {
+ for (var dy = -2; dy <= 2; dy++)
+ {
+ if (dx != 0 || dy != 0)
+ {
+ drawList.AddText(
+ cursor + new Vector2(dx, dy),
+ ImGui.GetColorU32(ImGuiCol.WindowBg),
+ ime.InputModeIcon);
+ }
+ }
+ }
+
drawList.AddText(cursor, ImGui.GetColorU32(ImGuiCol.Text), ime.InputModeIcon);
cursor.Y += candTextSize.Y + spaceY;
}
@@ -179,6 +193,20 @@ internal unsafe class DalamudImeWindow : Window
if (expandUpward && drawIme)
{
+ for (var dx = -2; dx <= 2; dx++)
+ {
+ for (var dy = -2; dy <= 2; dy++)
+ {
+ if (dx != 0 || dy != 0)
+ {
+ drawList.AddText(
+ cursor + new Vector2(dx, dy),
+ ImGui.GetColorU32(ImGuiCol.WindowBg),
+ ime.InputModeIcon);
+ }
+ }
+ }
+
drawList.AddText(cursor, ImGui.GetColorU32(ImGuiCol.Text), ime.InputModeIcon);
}