better tick system

This commit is contained in:
2024-11-03 09:22:53 +01:00
parent 7f5a8d9b0a
commit da7e293b3b
2 changed files with 40 additions and 101 deletions
+36 -97
View File
@@ -1,88 +1,36 @@
#[macro_export] #[macro_export]
macro_rules! __oml { macro_rules! __oml {
() => { Vec::new() }; () => { [String::new(), Vec::new()] };
// Props, With components (PC) // Props, With components (PC)
($tag:ident ($($k:ident = $v:expr),*) {$($inner:tt)*}) => {{ ($tag:ident { $($inner:tt)* }) => {{
vec![oml!($tag ($($k = $v),*) {$($inner)*})] (String::new(), vec![rsx!($tag {$($inner)*}) as Box<dyn osui::Element>])
}}; }};
($tag:ident ($($k:ident = $v:expr),*) {$($inner:tt)*} $($rest:tt)+) => {{ ($tag:ident { $($inner:tt)* } $($rest:tt)+) => {{
let mut comps: Vec<Box<dyn osui::Element>> = osui::__oml!($($rest)+); let mut comps: Vec<Box<dyn osui::Element>> = osui::__oml!($($rest)+).1;
comps.insert(0, oml!($tag ($($k = $v),*) {$($inner)*})); comps.insert(0, rsx!($tag {$($inner)*}) as Box<dyn osui::Element> );
comps (String::new(), comps)
}}; }};
// Components (C) ($text:expr) => {{
($tag:ident {$($inner:tt)*}) => {{ (format!($text), vec![])
vec![oml!($tag {$($inner)*})]
}};
($tag:ident {$($inner:tt)*} $($rest:tt)+) => {{
let mut comps: Vec<Box<dyn osui::Element>> = osui::__oml!($($rest)+);
comps.insert(0, oml!($tag {$($inner)*}));
comps
}};
// Expression, With components (EC)
($tag:ident ($text:expr; $($k:ident = $v:expr),*) {$($inner:tt)*}) => {{
vec![oml!($tag ($text; $($k = $v),*) {$($inner)*})]
}};
($tag:ident ($text:expr; $($k:ident = $v:expr),*) {$($inner:tt)*} $($rest:tt)+) => {{
let mut comps: Vec<Box<dyn osui::Element>> = osui::__oml!($($rest)+);
comps.insert(0, oml!($tag ($text; $($k = $v),*) {$($inner)*}));
comps
}};
// Expression (E)
($tag:ident ($text:expr; $($k:ident = $v:expr),*)) => {{
vec![oml!($tag ($text; $($k = $v),*))]
}};
($tag:ident ($text:expr; $($k:ident = $v:expr),*) $($rest:tt)+) => {{
let mut comps: Vec<Box<dyn osui::Element>> = osui::__oml!($($rest)+);
comps.insert(0, oml!($tag ($text; $($k = $v),*)));
comps
}};
// Props (P)
($tag:ident ($($k:ident = $v:expr),*)) => {{
vec![oml!($tag ($($k = $v),*))]
}};
($tag:ident ($($k:ident = $v:expr),*) $($rest:tt)+) => {{
let mut comps: Vec<Box<dyn osui::Element>> = osui::__oml!($($rest)+);
comps.insert(0, oml!($tag ($($k = $v),*)));
comps
}};
// Pre-Defined (D)
($text:expr;) => {{
vec![oml!($text;)]
}};
($text:expr; $($rest:tt)+) => {{
let mut comps: Vec<Box<dyn osui::Element>> = osui::__oml!($($rest)+);
comps.insert(0, oml!($text));
comps
}}; }};
} }
#[macro_export] #[macro_export]
/// Write OSUI Markup Language directly with rust. /// Write OSUI Markup Language directly with rust.
macro_rules! oml { macro_rules! rsx {
// Props (P)
($tag:ident ($($k:ident = $v:expr),*)) => {{ ( $tag:ident { $($inner:tt)* } ) => {{
let mut c = $tag(); let mut c = $tag();
$( let a = osui::__oml!($($inner)*);
c.$k = $v; c.text = a.0;
)* c.children = a.1;
c c
}}; }};
// Expression, With components (EC) ( $tag:ident { $($k:ident: $v:expr),*, $($inner:tt)* } ) => {{
( $tag:ident ($text:expr; $($k:ident = $v:expr),* ) {$($inner:tt)*} ) => {{
let mut c = $tag(); let mut c = $tag();
c.children = osui::__oml!($($inner)*); c.children = osui::__oml!($($inner)*);
c.text = String::from($text); c.text = String::from($text);
@@ -92,37 +40,28 @@ macro_rules! oml {
c c
}}; }};
// Expression (E) // ( $tag:ident { $text:expr } ) => {{
( $tag:ident ($text:expr; $($k:ident = $v:expr),*) ) => {{ // let mut c = $tag();
let mut c = $tag(); // c.text = format!($text);
c.text = String::from($text); // c
$( // }};
c.$k = $v;
)*
c
}};
// Components (C) // ( $tag:ident { $($k:ident: $v:expr),+, $text:expr } ) => {{
( $tag:ident {$($inner:tt)*} ) => {{ // let mut c = $tag();
let mut c = $tag(); // c.text = format!($text);
c.children = osui::__oml!($($inner)*); // $(
c // c.$k = $v;
}}; // )*
// c
// }};
// Props, With components (PC) // ($tag:ident { $($k:ident: $v:expr),* } ) => {{
( $tag:ident ($($k:ident = $v:expr),*) {$($inner:tt)*} ) => {{ // let mut c = $tag();
let mut c = $tag(); // $(
c.children = osui::__oml!($($inner)*); // c.$k = $v;
$( // )*
c.$k = $v; // c
)* // }};
c
}};
// Pre-Defined (D)
($text:expr;) => {{
$text
}};
} }
#[macro_export] #[macro_export]
+4 -4
View File
@@ -1,9 +1,9 @@
use osui::{oml, ui::*, App}; use osui::{rsx, ui::*, App};
fn main() { fn main() {
let mut app_screen = App::new(); let mut app_screen = App::new();
app_screen.set_component(oml!( app_screen.set_component(rsx! {
button("okay";) button { "test" }
)); });
app_screen.run(); app_screen.run();
} }