From 79fed9bd19f9ffbcfe5ffff89cfa475d71f80a3e Mon Sep 17 00:00:00 2001 From: ereeves Date: Thu, 24 Aug 2023 12:57:07 +0800 Subject: [PATCH 1/2] Basic IME mapping --- src/systems.rs | 39 +++++++++++++++++++++++++++++++++++++-- 1 file changed, 37 insertions(+), 2 deletions(-) diff --git a/src/systems.rs b/src/systems.rs index 1777898f8..6a9dd5d8c 100644 --- a/src/systems.rs +++ b/src/systems.rs @@ -16,8 +16,8 @@ use bevy::{ }, prelude::{Entity, EventReader, Query, Resource, Time}, window::{ - CursorEntered, CursorLeft, CursorMoved, ReceivedCharacter, RequestRedraw, WindowCreated, - WindowFocused, + CursorEntered, CursorLeft, CursorMoved, Ime, ReceivedCharacter, RequestRedraw, + WindowCreated, WindowFocused, }, }; use std::marker::PhantomData; @@ -35,6 +35,7 @@ pub struct InputEvents<'w, 's> { pub ev_window_focused: EventReader<'w, 's, WindowFocused>, pub ev_window_created: EventReader<'w, 's, WindowCreated>, pub ev_touch: EventReader<'w, 's, TouchInput>, + pub ev_ime_input: EventReader<'w, 's, Ime>, } impl<'w, 's> InputEvents<'w, 's> { @@ -50,6 +51,7 @@ impl<'w, 's> InputEvents<'w, 's> { self.ev_keyboard_input.iter().last(); self.ev_window_focused.iter().last(); self.ev_window_created.iter().last(); + self.ev_ime_input.iter().last(); } } @@ -231,6 +233,39 @@ pub fn process_input_system( } } + fn push_ime_event(params: &mut ContextSystemParams, window: &Entity, event: egui::Event) { + params + .contexts + .get_mut(*window) + .unwrap() + .egui_input + .events + .push(event); + } + + for ev in input_events.ev_ime_input.iter() { + match ev { + Ime::Preedit { + window, + value: _, + cursor: _, + } => push_ime_event(&mut context_params, window, egui::Event::CompositionStart), + Ime::Commit { window, value } => push_ime_event( + &mut context_params, + window, + egui::Event::CompositionEnd(value.clone()), + ), + Ime::Enabled { window } => { + push_ime_event(&mut context_params, window, egui::Event::CompositionStart) + } + Ime::Disabled { window } => push_ime_event( + &mut context_params, + window, + egui::Event::CompositionEnd("".to_string()), + ), + } + } + if let Some(mut focused_input) = context_params .focused_window .as_ref() From 40e4236e4274dda2d6b585a1e20376cba7833edf Mon Sep 17 00:00:00 2001 From: ereeves Date: Sun, 8 Oct 2023 01:01:00 +0800 Subject: [PATCH 2/2] Added push of CompositionUpdate event. --- src/systems.rs | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/systems.rs b/src/systems.rs index 6a9dd5d8c..eb479f754 100644 --- a/src/systems.rs +++ b/src/systems.rs @@ -247,9 +247,12 @@ pub fn process_input_system( match ev { Ime::Preedit { window, - value: _, + value, cursor: _, - } => push_ime_event(&mut context_params, window, egui::Event::CompositionStart), + } => { + push_ime_event(&mut context_params, window, egui::Event::CompositionStart); + push_ime_event(&mut context_params, window, egui::Event::CompositionUpdate(value.clone())); + }, Ime::Commit { window, value } => push_ime_event( &mut context_params, window,