summaryrefslogtreecommitdiffstats
path: root/core/src
diff options
context:
space:
mode:
authorLibravatar Héctor Ramón Jiménez <hector@hecrj.dev>2024-10-25 15:40:05 +0200
committerLibravatar Héctor Ramón Jiménez <hector@hecrj.dev>2024-11-05 23:52:58 +0100
commit752403d70c851ece620c4007710062b158e8dec3 (patch)
tree8d98a4100dec46c123edd3d3fa4966110da6003c /core/src
parent7fbc195b11f9a858bcc8f56f76907af82c966c26 (diff)
downloadiced-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.rs24
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 =