use crate::core::*; use ratatui::widgets::WidgetRef; /// Trait for things that render to the display. pub trait Render { // Render something to an area of the buffer. // Returns area used by component. // This is insufficient but for the most basic dynamic layout algorithms. fn render (&self, _b: &mut Buffer, _a: Rect) -> Usually { Ok(Rect { x: 0, y: 0, width: 0, height: 0 }) } fn min_width (&self) -> u16 { 0 } fn max_width (&self) -> u16 { u16::MAX } fn min_height (&self) -> u16 { 0 } fn max_height (&self) -> u16 { u16::MAX } } impl Render for Box { fn render (&self, b: &mut Buffer, a: Rect) -> Usually { (**self).render(b, a) } } impl WidgetRef for &dyn Render { fn render_ref (&self, area: Rect, buf: &mut Buffer) { Render::render(*self, buf, area).expect("Failed to render device."); } } impl WidgetRef for dyn Render { fn render_ref (&self, area: Rect, buf: &mut Buffer) { Render::render(self, buf, area).expect("Failed to render device."); } } pub trait Blit { // Render something to X, Y coordinates in a buffer, ignoring width/height. fn blit (&self, buf: &mut Buffer, x: u16, y: u16, style: Option