split Outset into 2 phases

This commit is contained in:
🪞👃🪞 2024-09-13 02:37:21 +03:00
parent 00da7de142
commit a0fbbc6257
3 changed files with 76 additions and 22 deletions

View file

@ -37,25 +37,66 @@ impl Content for Demo<Tui> {
type Engine = Tui;
fn content (&self) -> impl Widget<Engine = Tui> {
Layers::new(|add|{
add(&FillBg(Color::Rgb(128,0,0)))?;
add(&Outset::X(1, "foo"))?;
add(&FillBg(Color::Rgb(0,128,128)))?;
add(&Outset::XY(1, 1, Split::down(|add|{
add(&Layers::new(|add|{
add(&FillBg(Color::Rgb(255,0,0)))?;
add(&Outset::X(1, "."))?;
Ok(())
}))?;
add(&Layers::new(|add|{
add(&FillBg(Color::Rgb(255,128,0)))?;
add(&Outset::Y(1, "---"))?;
Ok(())
}))?;
add(&Layers::new(|add|{
add(&FillBg(Color::Rgb(128,0,0)))?;
add(&Outset::XY(0, 0, "~~~"))?;
Ok(())
}))?;
Ok(())
})))?;
Ok(())
})
//Align::Center(Outset::X(1, Layers::new(|add|{
//add(&FillBg(Color::Rgb(128,0,0)))?;
//add(&Split::down(|add|{
//add(&Outset::Y(1, Layers::new(|add|{
//add(&FillBg(Color::Rgb(0,128,0)))?;
//add(&Align::Center("12345"))?;
//add(&Align::Center("FOO"))
//})))?;
//add(&Outset::XY(1, 1, Layers::new(|add|{
//add(&Align::Center("1234567"))?;
//add(&Align::Center("BAR"))?;
//add(&FillBg(Color::Rgb(0,0,128)))
//})))
//}))
//})))
//Align::Y(Layers::new(|add|{
//add(&FillBg(Color::Rgb(128,0,0)))?;
//add(&Outset::X(1, Align::Center(Split::down(|add|{
//add(&Align::X(Layers::new(|add|{
//add(&Align::X(Outset::Y(1, Layers::new(|add|{
//add(&FillBg(Color::Rgb(0,128,0)))?;
//add(&Outset::Y(1, Align::Center("12345")))?;
//add(&Align::Center("12345"))?;
//add(&Align::Center("FOO"))
//})))?;
//add(&Layers::new(|add|{
//add(&Outset::XY(1, 1, Align::Center("1234567")))?;
//add(&Outset::XY(1, 1, Layers::new(|add|{
//add(&Align::Center("1234567"))?;
//add(&Align::Center("BAR"))?;
//add(&FillBg(Color::Rgb(0,0,128)))
//}))?;
//})))?;
//Ok(())
//}))))
//})))))
//}))
}
}

View file

@ -568,12 +568,8 @@ where
Ok(Some([x, y, w, h]))
}
fn render (&self, to: &mut Tui) -> Perhaps<[u16;4]> {
let layout = self.layout(to.area())?;
self.layout(to.area())?
.map(|area|(self.0)(&mut |layer| {
to.render_in(area, &layer)?;
Ok(())
}).map(|_|area))
.map(|area|(self.0)(&mut |layer|to.render_in(area, &layer).map(|_|())).map(|_|area))
.transpose()
}
}
@ -606,19 +602,36 @@ impl<T: Widget<Engine = Tui>> Content for Inset<u16, T> {
//}
//}
impl<T: Widget<Engine = Tui>> Content for Outset<u16, T> {
impl<T: Widget<Engine = Tui>> Widget for Outset<u16, T> {
type Engine = Tui;
fn content (&self) -> impl Widget<Engine = Tui> {
fn layout (&self, to: [u16;4]) -> Perhaps<[u16;4]> {
match *self {
Self::X(x, ref inner) =>
Grow::X(x + x, inner as &dyn Widget<Engine = Tui>),
Self::Y(y, ref inner) =>
Grow::Y(y + y, inner as &dyn Widget<Engine = Tui>),
Self::XY(x, y, ref inner) =>
Grow::XY(x, y, inner as &dyn Widget<Engine = Tui>),
}
Self::X(x, ref inner) => Grow::X(x + x, inner as &dyn Widget<Engine = Tui>),
Self::Y(y, ref inner) => Grow::Y(y + y, inner as &dyn Widget<Engine = Tui>),
Self::XY(x, y, ref inner) => Grow::XY(x + x, y + y, inner as &dyn Widget<Engine = Tui>),
}.layout(to)
}
fn render (&self, to: &mut Tui) -> Perhaps<[u16;4]> {
match *self {
Self::X(x, ref inner) => Plus::X(x, inner as &dyn Widget<Engine = Tui>),
Self::Y(y, ref inner) => Plus::Y(y, inner as &dyn Widget<Engine = Tui>),
Self::XY(x, y, ref inner) => Plus::XY(x, y, inner as &dyn Widget<Engine = Tui>),
}.render(to)
}
}
//impl<T: Widget<Engine = Tui>> Content for Outset<u16, T> {
//type Engine = Tui;
//fn content (&self) -> impl Widget<Engine = Tui> {
//match *self {
//Self::X(x, ref inner) =>
//Grow::X(x + x, inner as &dyn Widget<Engine = Tui>),
//Self::Y(y, ref inner) =>
//Grow::Y(y + y, inner as &dyn Widget<Engine = Tui>),
//Self::XY(x, y, ref inner) =>
//Grow::XY(x, y, inner as &dyn Widget<Engine = Tui>),
//}
//}
//}
pub trait BorderStyle {
const NW: &'static str = "";