small changes
This commit is contained in:
+11
-8
@@ -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> {
|
||||||
|
|||||||
+8
-8
@@ -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 {
|
||||||
rsx! {
|
let count = use_state(0);
|
||||||
test {} ()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn test() -> Element {
|
|
||||||
rsx! {
|
rsx! {
|
||||||
"ABC" (x-center y-center)
|
if (count == 0) {
|
||||||
|
"ok"
|
||||||
|
}
|
||||||
|
|
||||||
|
"{count}"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+23
@@ -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)*) => {
|
||||||
|
|||||||
Reference in New Issue
Block a user