diff options
author | 2025-02-03 22:49:28 +0100 | |
---|---|---|
committer | 2025-02-03 22:49:28 +0100 | |
commit | 5ab056318e7c2db981f008bd65d9e0b2aacb46c5 (patch) | |
tree | 5aa3e2cdb69dd85fe247ba15c8cfc22bb53dd961 /runtime | |
parent | ca009ba92af72c09ec6f22ca4eea06fe6228f19d (diff) | |
parent | bab18858cd60168b63ae442026f45a90eb6be731 (diff) | |
download | iced-5ab056318e7c2db981f008bd65d9e0b2aacb46c5.tar.gz iced-5ab056318e7c2db981f008bd65d9e0b2aacb46c5.tar.bz2 iced-5ab056318e7c2db981f008bd65d9e0b2aacb46c5.zip |
Merge pull request #2777 from kenz-gelsoft/explore-input-method2
Input Method Support
Diffstat (limited to 'runtime')
-rw-r--r-- | runtime/src/user_interface.rs | 43 |
1 files changed, 18 insertions, 25 deletions
diff --git a/runtime/src/user_interface.rs b/runtime/src/user_interface.rs index b2826f71..4bb7bba7 100644 --- a/runtime/src/user_interface.rs +++ b/runtime/src/user_interface.rs @@ -5,7 +5,9 @@ use crate::core::mouse; use crate::core::renderer; use crate::core::widget; use crate::core::window; -use crate::core::{Clipboard, Element, Layout, Rectangle, Shell, Size, Vector}; +use crate::core::{ + Clipboard, Element, InputMethod, Layout, Rectangle, Shell, Size, Vector, +}; use crate::overlay; /// A set of interactive graphical elements with a specific [`Layout`]. @@ -186,7 +188,8 @@ where use std::mem::ManuallyDrop; let mut outdated = false; - let mut redraw_request = None; + let mut redraw_request = window::RedrawRequest::Wait; + let mut input_method = InputMethod::None; let mut manual_overlay = ManuallyDrop::new( self.root @@ -220,16 +223,8 @@ where ); event_statuses.push(shell.event_status()); - - match (redraw_request, shell.redraw_request()) { - (None, Some(at)) => { - redraw_request = Some(at); - } - (Some(current), Some(new)) if new < current => { - redraw_request = Some(new); - } - _ => {} - } + redraw_request = redraw_request.min(shell.redraw_request()); + input_method.merge(shell.input_method()); if shell.is_layout_invalid() { let _ = ManuallyDrop::into_inner(manual_overlay); @@ -323,15 +318,8 @@ where self.overlay = None; } - match (redraw_request, shell.redraw_request()) { - (None, Some(at)) => { - redraw_request = Some(at); - } - (Some(current), Some(new)) if new < current => { - redraw_request = Some(new); - } - _ => {} - } + redraw_request = redraw_request.min(shell.redraw_request()); + input_method.merge(shell.input_method()); shell.revalidate_layout(|| { self.base = self.root.as_widget().layout( @@ -355,7 +343,10 @@ where if outdated { State::Outdated } else { - State::Updated { redraw_request } + State::Updated { + redraw_request, + input_method, + } }, event_statuses, ) @@ -636,7 +627,7 @@ impl Default for Cache { } /// The resulting state after updating a [`UserInterface`]. -#[derive(Debug, Clone, Copy)] +#[derive(Debug, Clone)] pub enum State { /// The [`UserInterface`] is outdated and needs to be rebuilt. Outdated, @@ -644,7 +635,9 @@ pub enum State { /// The [`UserInterface`] is up-to-date and can be reused without /// rebuilding. Updated { - /// The [`window::RedrawRequest`] when a redraw should be performed. - redraw_request: Option<window::RedrawRequest>, + /// The [`window::RedrawRequest`] describing when a redraw should be performed. + redraw_request: window::RedrawRequest, + /// The current [`InputMethod`] strategy of the user interface. + input_method: InputMethod, }, } |