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,
}
pub fn init() -> crate::Result<Console> {
pub fn init(mouse: bool) -> crate::Result<Console> {
crossterm::terminal::enable_raw_mode()?;
crate::utils::clear()?;
crate::utils::hide_cursor()?;
if mouse {
crossterm::execute!(std::io::stdout(), crossterm::event::EnableMouseCapture)?;
}
Ok(Console(Frame::new(crossterm::terminal::size()?)))
}
+7 -5
View File
@@ -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,
}
}
}
+7 -4
View File
@@ -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)
}
}
+34 -16
View File
@@ -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,) => {};
+6
View File
@@ -11,3 +11,9 @@ impl Widget for String {
self.clone()
}
}
impl Widget for crate::Element {
fn render(&self) -> String {
format!("")
}
}