better tick system
This commit is contained in:
+35
-96
@@ -1,128 +1,67 @@
|
|||||||
#[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)*}) => {{
|
|
||||||
vec![oml!($tag ($($k = $v),*) {$($inner)*})]
|
|
||||||
}};
|
|
||||||
|
|
||||||
($tag:ident ($($k:ident = $v:expr),*) {$($inner:tt)*} $($rest:tt)+) => {{
|
|
||||||
let mut comps: Vec<Box<dyn osui::Element>> = osui::__oml!($($rest)+);
|
|
||||||
comps.insert(0, oml!($tag ($($k = $v),*) {$($inner)*}));
|
|
||||||
comps
|
|
||||||
}};
|
|
||||||
|
|
||||||
// Components (C)
|
|
||||||
($tag:ident { $($inner:tt)* }) => {{
|
($tag:ident { $($inner:tt)* }) => {{
|
||||||
vec![oml!($tag {$($inner)*})]
|
(String::new(), vec![rsx!($tag {$($inner)*}) as Box<dyn osui::Element>])
|
||||||
}};
|
}};
|
||||||
|
|
||||||
($tag:ident { $($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 {$($inner)*}));
|
comps.insert(0, rsx!($tag {$($inner)*}) as Box<dyn osui::Element> );
|
||||||
comps
|
(String::new(), comps)
|
||||||
}};
|
}};
|
||||||
|
|
||||||
// Expression, With components (EC)
|
($text:expr) => {{
|
||||||
($tag:ident ($text:expr; $($k:ident = $v:expr),*) {$($inner:tt)*}) => {{
|
(format!($text), vec![])
|
||||||
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),*)) => {{
|
|
||||||
let mut c = $tag();
|
|
||||||
$(
|
|
||||||
c.$k = $v;
|
|
||||||
)*
|
|
||||||
c
|
|
||||||
}};
|
|
||||||
|
|
||||||
// Expression, With components (EC)
|
|
||||||
( $tag:ident ($text:expr; $($k:ident = $v:expr),* ) {$($inner:tt)*} ) => {{
|
|
||||||
let mut c = $tag();
|
|
||||||
c.children = osui::__oml!($($inner)*);
|
|
||||||
c.text = String::from($text);
|
|
||||||
$(
|
|
||||||
c.$k = $v;
|
|
||||||
)*
|
|
||||||
c
|
|
||||||
}};
|
|
||||||
|
|
||||||
// Expression (E)
|
|
||||||
( $tag:ident ($text:expr; $($k:ident = $v:expr),*) ) => {{
|
|
||||||
let mut c = $tag();
|
|
||||||
c.text = String::from($text);
|
|
||||||
$(
|
|
||||||
c.$k = $v;
|
|
||||||
)*
|
|
||||||
c
|
|
||||||
}};
|
|
||||||
|
|
||||||
// Components (C)
|
|
||||||
( $tag:ident { $($inner:tt)* } ) => {{
|
( $tag:ident { $($inner:tt)* } ) => {{
|
||||||
let mut c = $tag();
|
let mut c = $tag();
|
||||||
c.children = osui::__oml!($($inner)*);
|
let a = osui::__oml!($($inner)*);
|
||||||
|
c.text = a.0;
|
||||||
|
c.children = a.1;
|
||||||
c
|
c
|
||||||
}};
|
}};
|
||||||
|
|
||||||
// Props, With components (PC)
|
( $tag:ident { $($k:ident: $v:expr),*, $($inner:tt)* } ) => {{
|
||||||
( $tag:ident ($($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.$k = $v;
|
c.$k = $v;
|
||||||
)*
|
)*
|
||||||
c
|
c
|
||||||
}};
|
}};
|
||||||
|
|
||||||
// Pre-Defined (D)
|
// ( $tag:ident { $text:expr } ) => {{
|
||||||
($text:expr;) => {{
|
// let mut c = $tag();
|
||||||
$text
|
// c.text = format!($text);
|
||||||
}};
|
// c
|
||||||
|
// }};
|
||||||
|
|
||||||
|
// ( $tag:ident { $($k:ident: $v:expr),+, $text:expr } ) => {{
|
||||||
|
// let mut c = $tag();
|
||||||
|
// c.text = format!($text);
|
||||||
|
// $(
|
||||||
|
// c.$k = $v;
|
||||||
|
// )*
|
||||||
|
// c
|
||||||
|
// }};
|
||||||
|
|
||||||
|
// ($tag:ident { $($k:ident: $v:expr),* } ) => {{
|
||||||
|
// let mut c = $tag();
|
||||||
|
// $(
|
||||||
|
// c.$k = $v;
|
||||||
|
// )*
|
||||||
|
// c
|
||||||
|
// }};
|
||||||
}
|
}
|
||||||
|
|
||||||
#[macro_export]
|
#[macro_export]
|
||||||
|
|||||||
+4
-4
@@ -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();
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user