From ab5554abce8f96af913a6514fd200a1717f5bb54 Mon Sep 17 00:00:00 2001 From: Leo dev Date: Sat, 18 Jan 2025 18:13:45 +0100 Subject: [PATCH] expanded components --- src/console.rs | 6 ++++-- src/lib.rs | 12 +++++++----- src/main.rs | 11 +++++++---- src/rsx.rs | 50 ++++++++++++++++++++++++++++++++++---------------- src/widgets.rs | 6 ++++++ 5 files changed, 58 insertions(+), 27 deletions(-) diff --git a/src/console.rs b/src/console.rs index a4cdc26..f7cf1e4 100644 --- a/src/console.rs +++ b/src/console.rs @@ -11,11 +11,13 @@ pub enum Event { FocusLost, } -pub fn init() -> crate::Result { +pub fn init(mouse: bool) -> crate::Result { crossterm::terminal::enable_raw_mode()?; crate::utils::clear()?; crate::utils::hide_cursor()?; - crossterm::execute!(std::io::stdout(), crossterm::event::EnableMouseCapture)?; + if mouse { + crossterm::execute!(std::io::stdout(), crossterm::event::EnableMouseCapture)?; + } Ok(Console(Frame::new(crossterm::terminal::size()?))) } diff --git a/src/lib.rs b/src/lib.rs index d049319..715968f 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -23,16 +23,18 @@ pub trait Widget { #[derive(Debug, Clone, Copy)] pub enum Pos { - Auto, - Center, + #[allow(non_camel_case_types)] + auto, + #[allow(non_camel_case_types)] + center, Num(u16), } impl Pos { pub fn get(self, auto: u16, width: u16, frame: u16) -> u16 { match self { - Self::Auto => auto, - Self::Center => (frame - width) / 2, + Self::auto => auto, + Self::center => (frame - width) / 2, Self::Num(n) => n, } } @@ -195,7 +197,7 @@ impl Default for Area { width: Size::Auto, height: Size::Auto, x: Pos::Num(0), - y: Pos::Auto, + y: Pos::auto, } } } diff --git a/src/main.rs b/src/main.rs index 341a8e2..14fc820 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,7 +1,7 @@ use osui::prelude::*; fn main() -> osui::Result<()> { - let mut con = console::init()?; + let mut con = console::init(false)?; con.run(app())?; @@ -10,9 +10,12 @@ fn main() -> osui::Result<()> { pub fn app() -> Element { rsx! { - "X" (x-Center) - "Y" (y-Center) + test {} () + } +} - "Hello, World" (x-Center, y-Center) +pub fn test() -> Element { + rsx! { + "ABC" (x-center y-center) } } diff --git a/src/rsx.rs b/src/rsx.rs index db13d95..aa8f307 100644 --- a/src/rsx.rs +++ b/src/rsx.rs @@ -12,6 +12,7 @@ macro_rules! rsx { #[macro_export] macro_rules! rsx_inner { + // Literal ($frame:expr, $event:expr; $elem:literal ($($inner:tt)*) $($rest:tt)*) => { @@ -20,7 +21,24 @@ macro_rules! rsx_inner { $frame.draw(&format!($elem), area)?; $crate::rsx_inner!($frame, $event; $($rest)*); }; + ($frame:expr, $event:expr; + $elem:literal + $($rest:tt)*) => { + $frame.draw(&format!($elem), Area::new())?; + $crate::rsx_inner!($frame, $event; $($rest)*); + }; + // name { rsx } + ($frame:expr, $event:expr; + $elem:path { + $($einner:tt)* + } ($($inner:tt)*) + $($rest:tt)*) => { + let mut area = $crate::Area::new(); + $crate::tw_area!(area, $($inner)*); + $elem()($frame, $event)?; + $crate::rsx_inner!($frame, $event; $($rest)*); + }; ($frame:expr, $event:expr; $elem:literal $($rest:tt)*) => { @@ -38,47 +56,47 @@ macro_rules! tw_area { }; // X - ($a:expr, x-$v:ident $(, $($rest:tt)*)?) => { + ($a:expr, x-$v:ident $($rest:tt)*) => { $a.x = $crate::Pos::$v; - $crate::tw_area!($a, $($($rest)*)?); + $crate::tw_area!($a, $($rest)*); }; - ($a:expr, x-$v:literal $(, $($rest:tt)*)?) => { + ($a:expr, x-$v:literal $($rest:tt)*) => { $a.x = $crate::Pos::Num($v); - $crate::tw_area!($a, $($($rest)*)?); + $crate::tw_area!($a, $($rest)*); }; // Y - ($a:expr, y-$v:ident $(, $($rest:tt)*)?) => { + ($a:expr, y-$v:ident $($rest:tt)*) => { $a.y = $crate::Pos::$v; - $crate::tw_area!($a, $($($rest)*)?); + $crate::tw_area!($a, $($rest)*); }; - ($a:expr, y-$v:literal $(, $($rest:tt)*)?) => { + ($a:expr, y-$v:literal $($rest:tt)*) => { $a.y = $crate::Pos::Num($v); - $crate::tw_area!($a, $($($rest)*)?); + $crate::tw_area!($a, $($rest)*); }; // Width - ($a:expr, width-$v:ident $(, $($rest:tt)*)?) => { + ($a:expr, width-$v:ident $($rest:tt)*) => { $a.width = $crate::Size::$v; - $crate::tw_area!($a, $($($rest)*)?); + $crate::tw_area!($a, $($rest)*); }; - ($a:expr, width-$v:literal $(, $($rest:tt)*)?) => { + ($a:expr, width-$v:literal $($rest:tt)*) => { $a.width = $crate::Size::Num($v); - $crate::tw_area!($a, $($($rest)*)?); + $crate::tw_area!($a, $($rest)*); }; // Height - ($a:expr, height-$v:ident $(, $($rest:tt)*)?) => { + ($a:expr, height-$v:ident $($rest:tt)*) => { $a.height = $crate::Size::$v; - $crate::tw_area!($a, $($($rest)*)?); + $crate::tw_area!($a, $($rest)*); }; - ($a:expr, height-$v:literal $(, $($rest:tt)*)?) => { + ($a:expr, height-$v:literal $($rest:tt)*) => { $a.height = $crate::Size::Num($v); - $crate::tw_area!($a, $($($rest)*)?); + $crate::tw_area!($a, $($rest)*); }; ($a:expr,) => {}; diff --git a/src/widgets.rs b/src/widgets.rs index fb99bb8..006d4b3 100644 --- a/src/widgets.rs +++ b/src/widgets.rs @@ -11,3 +11,9 @@ impl Widget for String { self.clone() } } + +impl Widget for crate::Element { + fn render(&self) -> String { + format!("") + } +} \ No newline at end of file