Japanese could not be typed or displayed in the UI.
- Type tool: handle egui IME events (Preedit/Commit). The preedit text is
written into the layer and replaced on every update, underlined while
uncommitted, and the caret rect is reported through output.ime so the OS
enables the IME and positions its candidate window. Without output.ime,
egui-winit never calls set_ime_allowed, which is why only paste worked.
- UI fonts: append the first installed OS Japanese font (Hiragino, Yu Gothic,
Meiryo, Noto Sans CJK JP, IPA...) to the end of every egui font family, so
Latin text keeps Inter / JetBrains Mono and only missing glyphs fall
through. No font is bundled; a missing font is not an error. Native only.
- Text engine: try Japanese fallback families before the SC ones.
Not covered: the web build has no CJK font, UI strings are not translated,
and text layers do not set a "ja" locale yet.
Tested: IME preedit/commit/cancel/stale-range unit test, font fallback unit
test, ui-egui and text crate tests, clippy -D warnings, cargo xtask layers.
Verified by hand on macOS (UI glyphs, IME composition, candidate window).
Co-authored-by: Claude Sonnet 5.5 <noreply@anthropic.com>