lgui-core 0.2.0

Platform-neutral runtime and UI primitives for LGUI
Documentation
use crate::core::{UiId, UiRect};

#[derive(Clone, Debug, PartialEq, Eq)]
pub enum InvalidationRequest {
    All,
    Rect(UiRect),
    Node(UiId),
    Route,
    Animation { id: UiId, property: &'static str },
}

#[derive(Clone, Debug, Default)]
pub struct InvalidationSet {
    requests: Vec<InvalidationRequest>,
}

impl InvalidationSet {
    pub fn new() -> Self {
        Self::default()
    }

    pub fn invalidate_all(&mut self) {
        self.requests.push(InvalidationRequest::All);
    }

    pub fn invalidate_rect(&mut self, rect: UiRect) {
        self.requests.push(InvalidationRequest::Rect(rect));
    }

    pub fn invalidate_node(&mut self, id: UiId) {
        self.requests.push(InvalidationRequest::Node(id));
    }

    pub fn invalidate_route(&mut self) {
        self.requests.push(InvalidationRequest::Route);
    }

    pub fn invalidate_animation(&mut self, id: UiId, property: &'static str) {
        self.requests
            .push(InvalidationRequest::Animation { id, property });
    }

    pub fn is_empty(&self) -> bool {
        self.requests.is_empty()
    }

    pub fn drain(&mut self) -> impl Iterator<Item = InvalidationRequest> + '_ {
        self.requests.drain(..)
    }
}