Testing new structure

This commit is contained in:
2025-11-18 20:17:02 +01:00
parent e031f9bcef
commit 6e8ca5535e
2 changed files with 26 additions and 11 deletions
+14
View File
@@ -0,0 +1,14 @@
use osui::Node;
fn app() -> Node {
Box::new(|renderer| {
renderer.draw_text("Hello, World!", 10, 0).unwrap();
})
}
fn main() {
let mut osui = osui::Osui::new(Box::new(app));
loop {
osui.render().unwrap();
}
}
+12 -11
View File
@@ -5,34 +5,35 @@ pub mod renderer;
pub use error::Result; pub use error::Result;
pub trait Component { pub type Node = Box<dyn Fn(&mut dyn Renderer)>;
fn render(&mut self, renderer: &mut dyn Renderer); pub type Component = Box<dyn Fn() -> Node>;
}
pub struct Osui { pub struct Osui {
component: Box<dyn Component>, node: Node,
renderer: Option<Box<dyn Renderer>>, renderer: Option<Box<dyn Renderer>>,
} }
impl Osui { impl Osui {
pub fn new(component: Box<dyn Component>) -> Self { pub fn new(component: Component) -> Self {
Osui { Osui {
component, node: component(),
renderer: None, renderer: None,
} }
} }
pub fn with_renderer(component: Box<dyn Component>, renderer: Box<dyn Renderer>) -> Self { pub fn with_renderer(component: Component, renderer: Box<dyn Renderer>) -> Self {
Osui { Osui {
component, node: component(),
renderer: Some(renderer), renderer: Some(renderer),
} }
} }
pub fn render(&mut self) { pub fn render(&mut self) -> Result<()> {
renderer::utils::clear()?;
if let Some(renderer) = &mut self.renderer { if let Some(renderer) = &mut self.renderer {
self.component.render(renderer.as_mut()); (self.node)(renderer.as_mut());
} else { } else {
self.component.render(&mut OsuiRenderer); (self.node)(&mut OsuiRenderer);
} }
Ok(())
} }
} }