Skip to main content

lgui_core/runtime/frame/
invalidation.rs

1use crate::core::{UiId, UiRect};
2
3#[derive(Clone, Debug, PartialEq, Eq)]
4pub enum InvalidationRequest {
5    All,
6    Rect(UiRect),
7    Node(UiId),
8    Route,
9    Animation { id: UiId, property: &'static str },
10}
11
12#[derive(Clone, Debug, Default)]
13pub struct InvalidationSet {
14    requests: Vec<InvalidationRequest>,
15}
16
17impl InvalidationSet {
18    pub fn new() -> Self {
19        Self::default()
20    }
21
22    pub fn invalidate_all(&mut self) {
23        self.requests.push(InvalidationRequest::All);
24    }
25
26    pub fn invalidate_rect(&mut self, rect: UiRect) {
27        self.requests.push(InvalidationRequest::Rect(rect));
28    }
29
30    pub fn invalidate_node(&mut self, id: UiId) {
31        self.requests.push(InvalidationRequest::Node(id));
32    }
33
34    pub fn invalidate_route(&mut self) {
35        self.requests.push(InvalidationRequest::Route);
36    }
37
38    pub fn invalidate_animation(&mut self, id: UiId, property: &'static str) {
39        self.requests
40            .push(InvalidationRequest::Animation { id, property });
41    }
42
43    pub fn is_empty(&self) -> bool {
44        self.requests.is_empty()
45    }
46
47    pub fn drain(&mut self) -> impl Iterator<Item = InvalidationRequest> + '_ {
48        self.requests.drain(..)
49    }
50}