This commit is contained in:
2024-11-28 22:06:01 +01:00
parent 7e6d99606f
commit 69d2943bb3
3 changed files with 36 additions and 6 deletions
+17 -2
View File
@@ -1,6 +1,21 @@
use osui::examples;
use osui::prelude::*; use osui::prelude::*;
fn main() { fn main() {
launch!(examples::examples()); launch!(app());
}
// A simple counter
fn app() -> Element {
rsx! {
// Create a button with a on_click handler
button { on_click: Handler::new(move |btn: &mut Button, _, document| {
if let Some(count) = document.get_element_by_id::<DataHolder<u32>>("count") {
count.data += 1;
btn.children.set_text(&count.data.to_string());
}
}), "0" }
// Store the data (in this case count)
data_holder as u32 { id: "count" }
}
} }
+18 -2
View File
@@ -55,14 +55,23 @@ macro_rules! parse_rsx_param {
osui::parse_rsx_param!($elem, $($rest)*) osui::parse_rsx_param!($elem, $($rest)*)
}; };
($elem:expr, $text:expr) => { ($elem:expr, $elem_path:path as $t:ty { $($inner:tt)* } $($rest:tt)*) => {
if $elem.children.is_none() {$elem.children = $crate::Children::Children(Vec::new(), 0)}
if let $crate::Children::Children(children, _) = &mut $elem.children {
children.push(osui::ersx!($elem_path as $t { $($inner)* }));
}
osui::parse_rsx_param!($elem, $($rest)*)
};
($elem:expr, $text:expr) => {
if $elem.children.is_none() {$elem.children = $crate::Children::Text(format!($text))} if $elem.children.is_none() {$elem.children = $crate::Children::Text(format!($text))}
}; };
($elem:expr, $text:expr, $($inner:tt)*) => { ($elem:expr, $text:expr, $($inner:tt)*) => {
if $elem.children.is_none() {$elem.children = $crate::Children::Text(format!($text, $($inner)*))} if $elem.children.is_none() {$elem.children = $crate::Children::Text(format!($text, $($inner)*))}
}; };
($elem:expr, ) => {}; ($elem:expr, ) => {};
} }
#[macro_export] #[macro_export]
@@ -73,6 +82,13 @@ macro_rules! ersx {
$crate::parse_rsx_param!(elem, $($inner)*); $crate::parse_rsx_param!(elem, $($inner)*);
elem as $crate::Element elem as $crate::Element
}}; }};
($elem:path as $t:ty { $($inner:tt)* }) => {{
#[allow(unused_mut)]
let mut elem = paste::paste!{$elem::<$t>}();
$crate::parse_rsx_param!(elem, $($inner)*);
elem as $crate::Element
}};
} }
/// Makes a div and puts elements into it /// Makes a div and puts elements into it
+1 -2
View File
@@ -93,7 +93,6 @@ impl ElementWidget for Button<'_> {
document.render(); document.render();
sleep(100); sleep(100);
self.style.set_state(""); self.style.set_state("");
document.rebuild();
} }
} }
_ => {} _ => {}
@@ -107,7 +106,7 @@ pub struct DataHolder<'a, T> {
pub data: T, pub data: T,
} }
pub fn dataholder<'a, T: std::default::Default>() -> Box<DataHolder<'a, T>> { pub fn data_holder<'a, T: std::default::Default>() -> Box<DataHolder<'a, T>> {
Box::new(DataHolder { Box::new(DataHolder {
style: Style::default(), style: Style::default(),
data: T::default(), data: T::default(),