as type
This commit is contained in:
+17
-2
@@ -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
@@ -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
@@ -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(),
|
||||||
|
|||||||
Reference in New Issue
Block a user