diff --git a/README.md b/README.md
index 79a9b49..12667ed 100644
--- a/README.md
+++ b/README.md
@@ -1,5 +1,5 @@
-
+
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() {