as type
This commit is contained in:
+17
-2
@@ -1,6 +1,21 @@
|
||||
use osui::examples;
|
||||
use osui::prelude::*;
|
||||
|
||||
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" }
|
||||
}
|
||||
}
|
||||
|
||||
+16
@@ -55,9 +55,18 @@ macro_rules! parse_rsx_param {
|
||||
osui::parse_rsx_param!($elem, $($rest)*)
|
||||
};
|
||||
|
||||
($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))}
|
||||
};
|
||||
|
||||
($elem:expr, $text:expr, $($inner:tt)*) => {
|
||||
if $elem.children.is_none() {$elem.children = $crate::Children::Text(format!($text, $($inner)*))}
|
||||
};
|
||||
@@ -73,6 +82,13 @@ macro_rules! ersx {
|
||||
$crate::parse_rsx_param!(elem, $($inner)*);
|
||||
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
|
||||
|
||||
+1
-2
@@ -93,7 +93,6 @@ impl ElementWidget for Button<'_> {
|
||||
document.render();
|
||||
sleep(100);
|
||||
self.style.set_state("");
|
||||
document.rebuild();
|
||||
}
|
||||
}
|
||||
_ => {}
|
||||
@@ -107,7 +106,7 @@ pub struct DataHolder<'a, 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 {
|
||||
style: Style::default(),
|
||||
data: T::default(),
|
||||
|
||||
Reference in New Issue
Block a user