Split Shell::request_redraw into two different methods
This commit is contained in:
parent
7fbc195b11
commit
752403d70c
15 changed files with 89 additions and 114 deletions
|
|
@ -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 =
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue