use super::types::ToastType;
#[derive(Debug, Clone)]
pub struct ToastEntry {
pub toast: ToastType,
}
#[derive(Debug, Default, Clone)]
pub struct ToastStackState {
active: Vec<ToastEntry>,
}
impl ToastStackState {
pub fn new() -> Self {
Self::default()
}
pub fn push(&mut self, mut toast: ToastType, now_ms: u64) {
toast.timestamp_ms = now_ms;
self.active.push(ToastEntry { toast });
}
pub fn tick(&mut self, now_ms: u64) -> &[ToastEntry] {
self.active.retain(|e| !e.toast.is_expired(now_ms));
&self.active
}
pub fn entries(&self) -> &[ToastEntry] {
&self.active
}
pub fn clear(&mut self) {
self.active.clear();
}
pub fn is_overflow(&self, window_height: f64) -> bool {
use super::style::ToastGeometry as G;
let n = self.active.len() as f64;
G::TOP_ANCHOR + n * G::STACK_PITCH > window_height
}
pub fn len(&self) -> usize {
self.active.len()
}
pub fn is_empty(&self) -> bool {
self.active.is_empty()
}
}