From fb82c611df5a3d9ebe393e056741e84234519aba Mon Sep 17 00:00:00 2001 From: Leo dev Date: Sat, 18 Jan 2025 23:39:21 +0100 Subject: [PATCH] small changes --- src/console.rs | 19 +++++++++++-------- src/main.rs | 16 ++++++++-------- src/rsx.rs | 23 +++++++++++++++++++++++ 3 files changed, 42 insertions(+), 16 deletions(-) diff --git a/src/console.rs b/src/console.rs index f7cf1e4..d72a550 100644 --- a/src/console.rs +++ b/src/console.rs @@ -1,6 +1,6 @@ use crate::{Element, Frame}; -pub struct Console(Frame); +pub struct Console(Frame, bool); pub enum Event { Key(crossterm::event::KeyEvent), @@ -18,13 +18,7 @@ pub fn init(mouse: bool) -> crate::Result { if mouse { crossterm::execute!(std::io::stdout(), crossterm::event::EnableMouseCapture)?; } - Ok(Console(Frame::new(crossterm::terminal::size()?))) -} - -pub fn end() -> crate::Result<()> { - crossterm::terminal::disable_raw_mode()?; - crate::utils::clear()?; - crate::utils::show_cursor() + Ok(Console(Frame::new(crossterm::terminal::size()?), mouse)) } impl Console { @@ -44,6 +38,15 @@ impl Console { self.draw(ui.clone(), Some(event))?; } } + + pub fn end(&self) -> crate::Result<()> { + if self.1 { + crossterm::execute!(std::io::stdout(), crossterm::event::EnableMouseCapture)?; + } + crossterm::terminal::disable_raw_mode()?; + crate::utils::clear()?; + crate::utils::show_cursor() + } } pub fn read() -> crate::Result { diff --git a/src/main.rs b/src/main.rs index 14fc820..7102b02 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,21 +1,21 @@ use osui::prelude::*; fn main() -> osui::Result<()> { - let mut con = console::init(false)?; + let mut con = console::init(true)?; con.run(app())?; - console::end() + con.end() } pub fn app() -> Element { - rsx! { - test {} () - } -} + let count = use_state(0); -pub fn test() -> Element { rsx! { - "ABC" (x-center y-center) + if (count == 0) { + "ok" + } + + "{count}" } } diff --git a/src/rsx.rs b/src/rsx.rs index aa8f307..ec783a1 100644 --- a/src/rsx.rs +++ b/src/rsx.rs @@ -12,6 +12,28 @@ macro_rules! rsx { #[macro_export] macro_rules! rsx_inner { + // For loop + ($frame:expr, $event:expr; + for $i:pat in ($e:expr) $(%$s:ident),* {$($inner:tt)*} + $($rest:tt)*) => { + for $i in $e { + $(let $s = $s.copy_state();)* + $crate::rsx_inner!($frame, $event; $($inner)*); + } + $crate::rsx_inner!($frame, $event; $($rest)*); + }; + + // If statement + ($frame:expr, $event:expr; + if $(%$s:ident),* ($e:expr) {$($inner:tt)*} + $($rest:tt)*) => { + $(let $s = $s.copy_state();)* + if $e { + $crate::rsx_inner!($frame, $event; $($inner)*); + } + $crate::rsx_inner!($frame, $event; $($rest)*); + }; + // Literal ($frame:expr, $event:expr; $elem:literal ($($inner:tt)*) @@ -39,6 +61,7 @@ macro_rules! rsx_inner { $elem()($frame, $event)?; $crate::rsx_inner!($frame, $event; $($rest)*); }; + ($frame:expr, $event:expr; $elem:literal $($rest:tt)*) => {