diff options
author | 2024-10-25 15:40:05 +0200 | |
---|---|---|
committer | 2024-11-05 23:52:58 +0100 | |
commit | 752403d70c851ece620c4007710062b158e8dec3 (patch) | |
tree | 8d98a4100dec46c123edd3d3fa4966110da6003c /core/src | |
parent | 7fbc195b11f9a858bcc8f56f76907af82c966c26 (diff) | |
download | iced-752403d70c851ece620c4007710062b158e8dec3.tar.gz iced-752403d70c851ece620c4007710062b158e8dec3.tar.bz2 iced-752403d70c851ece620c4007710062b158e8dec3.zip |
Split `Shell::request_redraw` into two different methods
Diffstat (limited to 'core/src')
-rw-r--r-- | core/src/shell.rs | 24 |
1 files changed, 17 insertions, 7 deletions
diff --git a/core/src/shell.rs b/core/src/shell.rs index 2952ceff..7a92a2be 100644 --- a/core/src/shell.rs +++ b/core/src/shell.rs @@ -1,3 +1,4 @@ +use crate::time::Instant; use crate::window; /// A connection to the state of a shell. @@ -35,14 +36,19 @@ impl<'a, Message> Shell<'a, Message> { self.messages.push(message); } - /// Requests a new frame to be drawn. - pub fn request_redraw(&mut self, request: window::RedrawRequest) { + /// Requests a new frame to be drawn as soon as possible. + pub fn request_redraw(&mut self) { + self.redraw_request = Some(window::RedrawRequest::NextFrame); + } + + /// Requests a new frame to be drawn at the given [`Instant`]. + pub fn request_redraw_at(&mut self, at: Instant) { match self.redraw_request { None => { - self.redraw_request = Some(request); + self.redraw_request = Some(window::RedrawRequest::At(at)); } - Some(current) if request < current => { - self.redraw_request = Some(request); + Some(window::RedrawRequest::At(current)) if at < current => { + self.redraw_request = Some(window::RedrawRequest::At(at)); } _ => {} } @@ -95,8 +101,12 @@ impl<'a, Message> Shell<'a, Message> { pub fn merge<B>(&mut self, other: Shell<'_, B>, f: impl Fn(B) -> Message) { self.messages.extend(other.messages.drain(..).map(f)); - if let Some(at) = other.redraw_request { - self.request_redraw(at); + if let Some(new) = other.redraw_request { + self.redraw_request = Some( + self.redraw_request + .map(|current| if current < new { current } else { new }) + .unwrap_or(new), + ); } self.is_layout_invalid = |