diff options
author | 2024-10-22 02:50:46 +0200 | |
---|---|---|
committer | 2024-11-05 23:52:56 +0100 | |
commit | 52490397d64f187d55f51dc5883e3ba6c0da57a6 (patch) | |
tree | 5558afe7b78722eb954224c4bb2ae09b4cb15a19 /winit/src/program | |
parent | 3ba7c71e3ffb651fde753bcf63bb604c16d4bcc2 (diff) | |
download | iced-52490397d64f187d55f51dc5883e3ba6c0da57a6.tar.gz iced-52490397d64f187d55f51dc5883e3ba6c0da57a6.tar.bz2 iced-52490397d64f187d55f51dc5883e3ba6c0da57a6.zip |
Implement `reactive-rendering` for `text_input`
... and fix the redraw queue logic in `iced_winit`.
Diffstat (limited to 'winit/src/program')
-rw-r--r-- | winit/src/program/window_manager.rs | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/winit/src/program/window_manager.rs b/winit/src/program/window_manager.rs index 3d22e155..7c00a84b 100644 --- a/winit/src/program/window_manager.rs +++ b/winit/src/program/window_manager.rs @@ -1,4 +1,5 @@ use crate::core::mouse; +use crate::core::time::Instant; use crate::core::window::Id; use crate::core::{Point, Size}; use crate::graphics::Compositor; @@ -62,6 +63,7 @@ where surface, renderer, mouse_interaction: mouse::Interaction::None, + redraw_at: None, }, ); @@ -74,6 +76,19 @@ where self.entries.is_empty() } + pub fn is_idle(&self) -> bool { + self.entries + .values() + .any(|window| window.redraw_at.is_some()) + } + + pub fn redraw_at(&self) -> Option<Instant> { + self.entries + .values() + .filter_map(|window| window.redraw_at) + .min() + } + pub fn first(&self) -> Option<&Window<P, C>> { self.entries.first_key_value().map(|(_id, window)| window) } @@ -138,6 +153,7 @@ where pub mouse_interaction: mouse::Interaction, pub surface: C::Surface, pub renderer: P::Renderer, + pub redraw_at: Option<Instant>, } impl<P, C> Window<P, C> |