use rdom_core::{Event, NodeId};
use crate::TuiDom;
#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]
pub enum ControlFlow {
#[default]
Continue,
Quit,
}
pub struct AppContext<'a> {
pub dom: &'a mut TuiDom,
pub(super) redraw_requested: bool,
pub(super) quit_requested: bool,
pub(super) queued_dispatches: Vec<(NodeId, Event)>,
}
impl<'a> AppContext<'a> {
pub(super) fn new(dom: &'a mut TuiDom) -> Self {
Self {
dom,
redraw_requested: false,
quit_requested: false,
queued_dispatches: Vec::new(),
}
}
pub fn request_redraw(&mut self) {
self.redraw_requested = true;
}
pub fn quit(&mut self) {
self.quit_requested = true;
}
pub fn dispatch(&mut self, target: NodeId, event: &mut Event) {
let _ = self.dom.dispatch_event(target, event);
}
pub fn queue_dispatch(&mut self, target: NodeId, event: Event) {
self.queued_dispatches.push((target, event));
}
}