small changes

This commit is contained in:
2025-01-18 23:39:21 +01:00
parent ab5554abce
commit fb82c611df
3 changed files with 42 additions and 16 deletions
+11 -8
View File
@@ -1,6 +1,6 @@
use crate::{Element, Frame}; use crate::{Element, Frame};
pub struct Console(Frame); pub struct Console(Frame, bool);
pub enum Event { pub enum Event {
Key(crossterm::event::KeyEvent), Key(crossterm::event::KeyEvent),
@@ -18,13 +18,7 @@ pub fn init(mouse: bool) -> crate::Result<Console> {
if mouse { if mouse {
crossterm::execute!(std::io::stdout(), crossterm::event::EnableMouseCapture)?; crossterm::execute!(std::io::stdout(), crossterm::event::EnableMouseCapture)?;
} }
Ok(Console(Frame::new(crossterm::terminal::size()?))) Ok(Console(Frame::new(crossterm::terminal::size()?), mouse))
}
pub fn end() -> crate::Result<()> {
crossterm::terminal::disable_raw_mode()?;
crate::utils::clear()?;
crate::utils::show_cursor()
} }
impl Console { impl Console {
@@ -44,6 +38,15 @@ impl Console {
self.draw(ui.clone(), Some(event))?; 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<Event> { pub fn read() -> crate::Result<Event> {
+7 -7
View File
@@ -1,21 +1,21 @@
use osui::prelude::*; use osui::prelude::*;
fn main() -> osui::Result<()> { fn main() -> osui::Result<()> {
let mut con = console::init(false)?; let mut con = console::init(true)?;
con.run(app())?; con.run(app())?;
console::end() con.end()
} }
pub fn app() -> Element { pub fn app() -> Element {
let count = use_state(0);
rsx! { rsx! {
test {} () if (count == 0) {
} "ok"
} }
pub fn test() -> Element { "{count}"
rsx! {
"ABC" (x-center y-center)
} }
} }
+23
View File
@@ -12,6 +12,28 @@ macro_rules! rsx {
#[macro_export] #[macro_export]
macro_rules! rsx_inner { 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 // Literal
($frame:expr, $event:expr; ($frame:expr, $event:expr;
$elem:literal ($($inner:tt)*) $elem:literal ($($inner:tt)*)
@@ -39,6 +61,7 @@ macro_rules! rsx_inner {
$elem()($frame, $event)?; $elem()($frame, $event)?;
$crate::rsx_inner!($frame, $event; $($rest)*); $crate::rsx_inner!($frame, $event; $($rest)*);
}; };
($frame:expr, $event:expr; ($frame:expr, $event:expr;
$elem:literal $elem:literal
$($rest:tt)*) => { $($rest:tt)*) => {