Expand description
Describes input method events.
This is also called a “composition event”.
Most keypresses using a latin-like keyboard layout simply generate a WindowEvent::ReceivedCharacter
.
However, one couldn’t possibly have a key for every single unicode character that the user might want to type
- so the solution operating systems employ is to allow the user to type these using a sequence of keypresses instead.
A prominent example of this is accents - many keyboard layouts allow you to first click the “accent key”, and then the character you want to apply the accent to. This will generate the following event sequence:
// Press "`" key
Ime::Preedit("`", Some((0, 0)))
// Press "E" key
Ime::Preedit("", None) // Synthetic event generated by winit to clear preedit.
Ime::Commit("é")
Additionally, certain input devices are configured to display a candidate box that allow the user to select the
desired character interactively. (To properly position this box, you must use Window::set_ime_position
.)
An example of a keyboard layout which uses candidate boxes is pinyin. On a latin keybaord the following event sequence could be obtained:
// Press "A" key
Ime::Preedit("a", Some((1, 1)))
// Press "B" key
Ime::Preedit("a b", Some((3, 3)))
// Press left arrow key
Ime::Preedit("a b", Some((1, 1)))
// Press space key
Ime::Preedit("啊b", Some((3, 3)))
// Press space key
Ime::Preedit("", None) // Synthetic event generated by winit to clear preedit.
Ime::Commit("啊不")
Variants
Enabled
Notifies when the IME was enabled.
After getting this event you could receive Preedit
and
Commit
events. You should also start performing IME related requests
like Window::set_ime_position
.
Preedit(String, Option<(usize, usize)>)
Notifies when a new composing text should be set at the cursor position.
The value represents a pair of the preedit string and the cursor begin position and end
position. When it’s None
, the cursor should be hidden. When String
is an empty string
this indicates that preedit was cleared.
The cursor position is byte-wise indexed.
Commit(String)
Notifies when text should be inserted into the editor widget.
Right before this event winit will send empty Self::Preedit
event.
Disabled
Notifies when the IME was disabled.
After receiving this event you won’t get any more Preedit
or
Commit
events until the next Enabled
event. You should
also stop issuing IME related requests like Window::set_ime_position
and clear pending
preedit text.
Trait Implementations
sourceimpl<'de> Deserialize<'de> for Ime
impl<'de> Deserialize<'de> for Ime
sourcefn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
Deserialize this value from the given Serde deserializer. Read more
sourceimpl PartialEq<Ime> for Ime
impl PartialEq<Ime> for Ime
impl Eq for Ime
impl StructuralEq for Ime
impl StructuralPartialEq for Ime
Auto Trait Implementations
impl RefUnwindSafe for Ime
impl Send for Ime
impl Sync for Ime
impl Unpin for Ime
impl UnwindSafe for Ime
Blanket Implementations
sourceimpl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
const: unstable · sourcefn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more