resources (not fully working yet)

This commit is contained in:
2025-07-06 02:12:10 -05:00
parent 4dfbee5984
commit 5fabd1a8ab
4 changed files with 42 additions and 9 deletions
+2 -3
View File
@@ -54,9 +54,8 @@ impl VGrid {
})
}
pub fn draw(self: &Arc<Self>, element: &Arc<Widget>) -> Arc<Self> {
pub fn draw(self: &Arc<Self>, element: &Arc<Widget>) -> Arc<Widget> {
let r2 = self.clone();
let r = self.clone();
element.component(Handler::new(move |elem, e: &RenderWrapperEvent| {
let scope = e.get_scope();
scope.clear();
@@ -94,7 +93,7 @@ impl VGrid {
scope.set_parent_size(w, h);
}));
r
element.clone()
}
}
+4 -3
View File
@@ -1,9 +1,10 @@
pub mod id;
pub mod tick;
pub mod velocity;
pub mod resources;
use std::{
any::Any,
any::{type_name, Any},
fmt::Debug,
sync::{Arc, Mutex},
};
@@ -45,8 +46,8 @@ impl<E: Event + 'static> Handler<E> {
}
}
impl<T: Event> Debug for Handler<T> {
impl<E: Event> Debug for Handler<E> {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "Handler")
write!(f, "Handler({})", type_name::<E>())
}
}
+16
View File
@@ -0,0 +1,16 @@
use crate::{event, widget::Component};
#[derive(Debug, Clone)]
pub struct Resource<T>(pub T);
impl<T: Send + Sync + 'static> Component for Resource<T> {
fn as_any(&self) -> &dyn std::any::Any {
self
}
fn as_any_mut(&mut self) -> &mut dyn std::any::Any {
self
}
}
event!(ResourceUpdate);
+20 -3
View File
@@ -3,12 +3,18 @@ use osui::{
div::Div,
grid::{HGrid, VGrid},
},
extensions::{
resources::Resource,
tick::{TickEvent, TickExtension},
Handler,
},
style::Transform,
Screen,
};
fn main() {
let mut screen = Screen::new();
screen.extension(TickExtension(10));
let container = Div::new(0xffff00);
@@ -23,12 +29,23 @@ fn main() {
for _ in 1..6 {
let row = HGrid::new(0xff00ff, 1);
vgrid.draw(screen.draw(row.clone()));
let row_widget = vgrid.draw(
screen
.draw(row.clone())
.component(Resource(Vec::<&str>::from(["Test"])))
.component(Handler::new(|w, t: &TickEvent| {
if t.0 >= 10 {
let mut res = w.get::<Resource<Vec<&str>>>().unwrap();
res.0.push("Hello World");
w.set_component(res);
}
})),
);
for i in 1..10 {
for i in row_widget.get::<Resource<Vec<&str>>>().unwrap().0 {
row.draw(
screen
.draw((format!("Item {i}"), 0xff0000))
.draw((i.to_string(), 0xff0000))
.component(Transform::new()),
);
}