iced_core/window/
redraw_request.rs

1use crate::time::Instant;
2
3/// A request to redraw a window.
4#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord)]
5pub enum RedrawRequest {
6    /// Redraw the next frame.
7    NextFrame,
8
9    /// Redraw at the given time.
10    At(Instant),
11
12    /// No redraw is needed.
13    Wait,
14}
15
16impl From<Instant> for RedrawRequest {
17    fn from(time: Instant) -> Self {
18        Self::At(time)
19    }
20}
21
22#[cfg(test)]
23mod tests {
24    use super::*;
25    use crate::time::Duration;
26
27    #[test]
28    fn ordering() {
29        let now = Instant::now();
30        let later = now + Duration::from_millis(10);
31
32        assert_eq!(RedrawRequest::NextFrame, RedrawRequest::NextFrame);
33        assert_eq!(RedrawRequest::At(now), RedrawRequest::At(now));
34
35        assert!(RedrawRequest::NextFrame < RedrawRequest::At(now));
36        assert!(RedrawRequest::At(now) > RedrawRequest::NextFrame);
37        assert!(RedrawRequest::At(now) < RedrawRequest::At(later));
38        assert!(RedrawRequest::At(later) > RedrawRequest::At(now));
39
40        assert!(RedrawRequest::NextFrame <= RedrawRequest::NextFrame);
41        assert!(RedrawRequest::NextFrame <= RedrawRequest::At(now));
42        assert!(RedrawRequest::At(now) >= RedrawRequest::NextFrame);
43        assert!(RedrawRequest::At(now) <= RedrawRequest::At(now));
44        assert!(RedrawRequest::At(now) <= RedrawRequest::At(later));
45        assert!(RedrawRequest::At(later) >= RedrawRequest::At(now));
46
47        assert!(RedrawRequest::Wait > RedrawRequest::NextFrame);
48        assert!(RedrawRequest::Wait > RedrawRequest::At(later));
49    }
50}