lgui_core/runtime/frame/
invalidation.rs1use 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}