expanded components
This commit is contained in:
+4
-2
@@ -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()?;
|
||||
crossterm::execute!(std::io::stdout(), crossterm::event::EnableMouseCapture)?;
|
||||
if mouse {
|
||||
crossterm::execute!(std::io::stdout(), crossterm::event::EnableMouseCapture)?;
|
||||
}
|
||||
Ok(Console(Frame::new(crossterm::terminal::size()?)))
|
||||
}
|
||||
|
||||
|
||||
+7
-5
@@ -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
@@ -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
@@ -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,) => {};
|
||||
|
||||
@@ -11,3 +11,9 @@ impl Widget for String {
|
||||
self.clone()
|
||||
}
|
||||
}
|
||||
|
||||
impl Widget for crate::Element {
|
||||
fn render(&self) -> String {
|
||||
format!("")
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user