use crate::gfx::BlendMode; use prometeu_hal::color::Color; #[derive(Debug, Clone, PartialEq, Eq)] pub enum OverlayCommand { FillRectBlend { x: i32, y: i32, w: i32, h: i32, color: Color, mode: BlendMode }, DrawLine { x0: i32, y0: i32, x1: i32, y1: i32, color: Color }, DrawCircle { x: i32, y: i32, r: i32, color: Color }, DrawDisc { x: i32, y: i32, r: i32, border_color: Color, fill_color: Color }, DrawSquare { x: i32, y: i32, w: i32, h: i32, border_color: Color, fill_color: Color }, DrawText { x: i32, y: i32, text: String, color: Color }, } #[derive(Debug, Clone, Default)] pub struct DeferredGfxOverlay { commands: Vec, } impl DeferredGfxOverlay { pub fn begin_frame(&mut self) { self.commands.clear(); } pub fn push(&mut self, command: OverlayCommand) { self.commands.push(command); } pub fn commands(&self) -> &[OverlayCommand] { &self.commands } pub fn command_count(&self) -> usize { self.commands.len() } pub fn take_commands(&mut self) -> Vec { std::mem::take(&mut self.commands) } }