Testing new structure
This commit is contained in:
@@ -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
@@ -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(())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user