diff --git a/README.md b/README.md index 79a9b49..12667ed 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@

- OSUI + OSUI

osui

diff --git a/github/OSUI.svg b/github/OSUI.svg deleted file mode 100644 index 5555434..0000000 --- a/github/OSUI.svg +++ /dev/null @@ -1,89 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/lib.rs b/src/lib.rs index a28f81c..a77ed04 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -34,8 +34,8 @@ pub mod utils; pub mod prelude { pub use crate::ui::Color::*; - pub use crate::ui::Number::*; pub use crate::ui::Font::*; + pub use crate::ui::Number::*; pub use crate::{self as osui, css, ersx, launch, rsx, ui::*, Handler}; pub use crate::{call, Children, Element, ElementCore, ElementWidget}; pub use crate::{style, Document, RenderResult, RenderWriter}; @@ -114,7 +114,7 @@ impl Document { } } } - pub fn rebuild(&self) { + pub fn restart(&self) { if !self.running.is_null() { unsafe { *self.running = Some(true); @@ -151,6 +151,9 @@ impl Document { utils::flush(); } } + pub fn draw(&mut self, element: &mut Element) { + self.element = element; + } } impl Default for Children { diff --git a/src/main.rs b/src/main.rs index ac3ae3f..fa16f67 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,21 +1,5 @@ -use osui::prelude::*; +use osui::{examples::examples, prelude::*}; fn main() { - 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::>("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" } - } + launch!(examples()); } diff --git a/src/rsx.rs b/src/rsx.rs index 3820349..5513962 100644 --- a/src/rsx.rs +++ b/src/rsx.rs @@ -1,4 +1,16 @@ #[macro_export] +macro_rules! check_expr { + (|| $code:block) => { + $crate::Handler::new(move |_, _, _| $code) + }; + (|$($inner:tt)*| $code:block) => { + $crate::Handler::new(move |$($inner)*| $code) + }; + ($expr:expr) => { + $expr + }; +} +#[macro_export] macro_rules! parse_rsx_param { ($elem:expr, for ($($for:tt)*) $code:block $($rest:tt)*) => { if $elem.children.is_none() {$elem.children = $crate::Children::Children(Vec::new(), 0)} @@ -10,33 +22,33 @@ macro_rules! parse_rsx_param { osui::parse_rsx_param!($elem, $($rest)*); }; - ($elem:expr, $($k:ident).+: $v:expr) => { - $elem.$($k).+ = $v; + ($elem:expr, $($k:ident).+: fn($($params:tt)*) $code:block $(, $($rest:tt)*)?) => { + $elem.$($k).+ = $crate::Handler::new(|$($params)*| $code); + osui::parse_rsx_param!($elem, $($($rest)*)?); }; - ($elem:expr, $($k:ident).+: $v:expr, $($rest:tt)*) => { - $elem.$($k).+ = $v; - osui::parse_rsx_param!($elem, $($rest)*); + ($elem:expr, $($k:ident).+: $v:expr $(, $($rest:tt)*)?) => { + $elem.$($k).+ = $crate::check_expr!($v); + osui::parse_rsx_param!($elem, $($($rest)*)?); }; - ($elem:expr, $p:path) => { + ($elem:expr, $p:path) => { $p; }; ($elem:expr, $($k:ident).+, $($rest:tt)*) => { - $elem.$($k).+; + $elem.$($k).+ = true; osui::parse_rsx_param!($elem, $($rest)*); }; ($elem:expr, $($k:ident).+., $($rest:tt)*) => { - $elem.$($k). - +.; + $elem.$($k).+.; osui::parse_rsx_param!($elem, $($rest)*); }; ($elem:expr, $($k:ident).+.: $v:expr) => { - $elem.$($k).+. = $v; + $elem.$($k).+. = $crate::check_expr!($v); }; - ($elem:expr, $($k:ident).+.: $v:expr, $($rest:tt)*) => { - $elem.$($k).+. = $v; - osui::parse_rsx_param!($elem, $($rest)*); + ($elem:expr, $($k:ident).+.: $v:expr, $(, $($rest:tt)*)?) => { + $elem.$($k).+. = $crate::check_expr!($v); + osui::parse_rsx_param!($elem, $($($rest)*)?); }; ($elem:expr, $code:block $($rest:tt)*) => { @@ -64,14 +76,15 @@ macro_rules! parse_rsx_param { }; ($elem:expr, $text:expr) => { - if $elem.children.is_none() {$elem.children = $crate::Children::Text(format!($text))} + $elem.children.set_text_force(&format!($text)) }; ($elem:expr, $text:expr, $($inner:tt)*) => { - if $elem.children.is_none() {$elem.children = $crate::Children::Text(format!($text, $($inner)*))} + $elem.children.set_text_force(&format!($text, $($inner)*)) }; ($elem:expr, ) => {}; + ($elem:expr) => {}; } #[macro_export] diff --git a/src/utils.rs b/src/utils.rs index ef3df37..18a691a 100644 --- a/src/utils.rs +++ b/src/utils.rs @@ -108,7 +108,8 @@ impl Frame { } crate::ui::Number::Pe(p) => y = (self.frame.len() * p) / 100, crate::ui::Number::Center => { - y = (self.frame.len() - output.0.matches('\n').count() + 1) / 2 + let content_height = output.0.lines().count(); + y = (self.frame.len() - content_height) / 2; } crate::ui::Number::Auto => { for (i, n) in self.used.iter().enumerate() {