generalize Layers

This commit is contained in:
🪞👃🪞 2024-09-15 19:53:20 +03:00
parent 35b37e3e3a
commit f7b2134310
3 changed files with 53 additions and 33 deletions

View file

@ -416,31 +416,31 @@ where
}
}
impl<F> Widget for Layers<Tui, F>
where
F: Send + Sync + Fn(&mut dyn FnMut(&dyn Widget<Engine = Tui>)->Usually<()>)->Usually<()>
{
type Engine = Tui;
fn layout (&self, area: [u16;2]) -> Perhaps<[u16;2]> {
let mut w = 0;
let mut h = 0;
(self.0)(&mut |layer| {
if let Some(layer_area) = layer.layout(area)? {
w = w.max(layer_area.w());
h = h.max(layer_area.h());
}
Ok(())
})?;
Ok(Some([w, h]))
}
fn render (&self, to: &mut TuiOutput) -> Usually<()> {
if let Some(size) = self.layout(to.area().wh())? {
(self.0)(&mut |layer|to.render_in(to.area().clip(size), &layer))
} else {
Ok(())
}
}
}
//impl<F> Widget for Layers<Tui, F>
//where
//F: Send + Sync + Fn(&mut dyn FnMut(&dyn Widget<Engine = Tui>)->Usually<()>)->Usually<()>
//{
//type Engine = Tui;
//fn layout (&self, area: [u16;2]) -> Perhaps<[u16;2]> {
//let mut w = 0;
//let mut h = 0;
//(self.0)(&mut |layer| {
//if let Some(layer_area) = layer.layout(area)? {
//w = w.max(layer_area.w());
//h = h.max(layer_area.h());
//}
//Ok(())
//})?;
//Ok(Some([w, h]))
//}
//fn render (&self, to: &mut TuiOutput) -> Usually<()> {
//if let Some(size) = self.layout(to.area().wh())? {
//(self.0)(&mut |layer|to.render_in(to.area().clip(size), &layer))
//} else {
//Ok(())
//}
//}
//}
pub struct Border<S: BorderStyle>(pub S);