expanded components

This commit is contained in:
2025-01-18 18:13:45 +01:00
parent 9ecf8de501
commit ab5554abce
5 changed files with 58 additions and 27 deletions
+3 -1
View File
@@ -11,11 +11,13 @@ pub enum Event {
FocusLost, FocusLost,
} }
pub fn init() -> crate::Result<Console> { pub fn init(mouse: bool) -> crate::Result<Console> {
crossterm::terminal::enable_raw_mode()?; crossterm::terminal::enable_raw_mode()?;
crate::utils::clear()?; crate::utils::clear()?;
crate::utils::hide_cursor()?; crate::utils::hide_cursor()?;
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()?)))
} }
+7 -5
View File
@@ -23,16 +23,18 @@ pub trait Widget {
#[derive(Debug, Clone, Copy)] #[derive(Debug, Clone, Copy)]
pub enum Pos { pub enum Pos {
Auto, #[allow(non_camel_case_types)]
Center, auto,
#[allow(non_camel_case_types)]
center,
Num(u16), Num(u16),
} }
impl Pos { impl Pos {
pub fn get(self, auto: u16, width: u16, frame: u16) -> u16 { pub fn get(self, auto: u16, width: u16, frame: u16) -> u16 {
match self { match self {
Self::Auto => auto, Self::auto => auto,
Self::Center => (frame - width) / 2, Self::center => (frame - width) / 2,
Self::Num(n) => n, Self::Num(n) => n,
} }
} }
@@ -195,7 +197,7 @@ impl Default for Area {
width: Size::Auto, width: Size::Auto,
height: Size::Auto, height: Size::Auto,
x: Pos::Num(0), x: Pos::Num(0),
y: Pos::Auto, y: Pos::auto,
} }
} }
} }
+7 -4
View File
@@ -1,7 +1,7 @@
use osui::prelude::*; use osui::prelude::*;
fn main() -> osui::Result<()> { fn main() -> osui::Result<()> {
let mut con = console::init()?; let mut con = console::init(false)?;
con.run(app())?; con.run(app())?;
@@ -10,9 +10,12 @@ fn main() -> osui::Result<()> {
pub fn app() -> Element { pub fn app() -> Element {
rsx! { rsx! {
"X" (x-Center) test {} ()
"Y" (y-Center) }
}
"Hello, World" (x-Center, y-Center) pub fn test() -> Element {
rsx! {
"ABC" (x-center y-center)
} }
} }
+34 -16
View File
@@ -12,6 +12,7 @@ macro_rules! rsx {
#[macro_export] #[macro_export]
macro_rules! rsx_inner { macro_rules! rsx_inner {
// Literal
($frame:expr, $event:expr; ($frame:expr, $event:expr;
$elem:literal ($($inner:tt)*) $elem:literal ($($inner:tt)*)
$($rest:tt)*) => { $($rest:tt)*) => {
@@ -20,7 +21,24 @@ macro_rules! rsx_inner {
$frame.draw(&format!($elem), area)?; $frame.draw(&format!($elem), area)?;
$crate::rsx_inner!($frame, $event; $($rest)*); $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; ($frame:expr, $event:expr;
$elem:literal $elem:literal
$($rest:tt)*) => { $($rest:tt)*) => {
@@ -38,47 +56,47 @@ macro_rules! tw_area {
}; };
// X // X
($a:expr, x-$v:ident $(, $($rest:tt)*)?) => { ($a:expr, x-$v:ident $($rest:tt)*) => {
$a.x = $crate::Pos::$v; $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); $a.x = $crate::Pos::Num($v);
$crate::tw_area!($a, $($($rest)*)?); $crate::tw_area!($a, $($rest)*);
}; };
// Y // Y
($a:expr, y-$v:ident $(, $($rest:tt)*)?) => { ($a:expr, y-$v:ident $($rest:tt)*) => {
$a.y = $crate::Pos::$v; $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); $a.y = $crate::Pos::Num($v);
$crate::tw_area!($a, $($($rest)*)?); $crate::tw_area!($a, $($rest)*);
}; };
// Width // Width
($a:expr, width-$v:ident $(, $($rest:tt)*)?) => { ($a:expr, width-$v:ident $($rest:tt)*) => {
$a.width = $crate::Size::$v; $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); $a.width = $crate::Size::Num($v);
$crate::tw_area!($a, $($($rest)*)?); $crate::tw_area!($a, $($rest)*);
}; };
// Height // Height
($a:expr, height-$v:ident $(, $($rest:tt)*)?) => { ($a:expr, height-$v:ident $($rest:tt)*) => {
$a.height = $crate::Size::$v; $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); $a.height = $crate::Size::Num($v);
$crate::tw_area!($a, $($($rest)*)?); $crate::tw_area!($a, $($rest)*);
}; };
($a:expr,) => {}; ($a:expr,) => {};
+6
View File
@@ -11,3 +11,9 @@ impl Widget for String {
self.clone() self.clone()
} }
} }
impl Widget for crate::Element {
fn render(&self) -> String {
format!("")
}
}