use crate::{ Mask, PrimitiveRegistry, TextData, Textures, WeakWidget, WidgetId, Widgets, util::TrackedArena, }; mod active; mod cache; mod painter; mod render_state; mod size; pub use active::*; pub use painter::Painter; pub use render_state::*; pub use size::*; #[derive(Default)] pub struct UiData { pub widgets: Widgets, /// Every primitive this ui can draw. pub primitives: PrimitiveRegistry, pub textures: Textures, pub text: TextData, pub masks: TrackedArena, } pub trait UiRsc { fn ui(&self) -> &UiData; fn ui_mut(&mut self) -> &mut UiData; #[allow(unused_variables)] fn on_add(&mut self, id: WeakWidget) {} #[allow(unused_variables)] fn on_remove(&mut self, id: WidgetId) {} #[allow(unused_variables)] fn on_draw(&mut self, active: &ActiveData) {} #[allow(unused_variables)] fn on_undraw(&mut self, active: &ActiveData) {} fn widgets(&self) -> &Widgets { &self.ui().widgets } fn widgets_mut(&mut self) -> &mut Widgets { &mut self.ui_mut().widgets } fn free(&mut self) { while let Some(id) = self.widgets_mut().free_next() { self.on_remove(id); } self.ui_mut().textures.free(); } }