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