1
0
mirror of https://github.com/emilk/egui.git synced 2026-09-01 06:10:06 -04:00

Improve IME support with new Event::Ime (#4358)

* Closes #4354 

Fix: can't repeat input chinese words

AND

For Windows :
ImeEnable
ImeDisable

---------

Co-authored-by: Emil Ernerfeldt <emil.ernerfeldt@gmail.com>
This commit is contained in:
rustbasic
2024-04-22 19:43:07 +09:00
committed by GitHub
parent 587bc2034a
commit 436c671331
5 changed files with 99 additions and 62 deletions

View File

@@ -68,7 +68,8 @@ pub fn install_text_agent(runner_ref: &WebRunner) -> Result<(), JsValue> {
is_composing.set(true);
input_clone.set_value("");
runner.input.raw.events.push(egui::Event::CompositionStart);
let egui_event = egui::Event::Ime(egui::ImeEvent::Enabled);
runner.input.raw.events.push(egui_event);
runner.needs_repaint.repaint_asap();
}
})?;
@@ -77,8 +78,9 @@ pub fn install_text_agent(runner_ref: &WebRunner) -> Result<(), JsValue> {
&input,
"compositionupdate",
move |event: web_sys::CompositionEvent, runner: &mut AppRunner| {
if let Some(event) = event.data().map(egui::Event::CompositionUpdate) {
runner.input.raw.events.push(event);
if let Some(text) = event.data() {
let egui_event = egui::Event::Ime(egui::ImeEvent::Preedit(text));
runner.input.raw.events.push(egui_event);
runner.needs_repaint.repaint_asap();
}
},
@@ -91,8 +93,9 @@ pub fn install_text_agent(runner_ref: &WebRunner) -> Result<(), JsValue> {
is_composing.set(false);
input_clone.set_value("");
if let Some(event) = event.data().map(egui::Event::CompositionEnd) {
runner.input.raw.events.push(event);
if let Some(text) = event.data() {
let egui_event = egui::Event::Ime(egui::ImeEvent::Commit(text));
runner.input.raw.events.push(egui_event);
runner.needs_repaint.repaint_asap();
}
}