mirror of
https://codeberg.org/unspeaker/tengri.git
synced 2025-12-06 19:56:44 +01:00
This commit is contained in:
parent
ab0dc3fae0
commit
ab1afa219f
2 changed files with 24 additions and 47 deletions
|
|
@ -777,27 +777,15 @@ pub struct Stack<E, F> {
|
|||
callback: F
|
||||
}
|
||||
impl<E: Output, F: Fn(&mut dyn FnMut(&dyn Render<E>)->())->()> Stack<E, F> {
|
||||
pub fn north (callback: F) -> Self { Self::new(North, callback) }
|
||||
pub fn south (callback: F) -> Self { Self::new(South, callback) }
|
||||
pub fn east (callback: F) -> Self { Self::new(East, callback) }
|
||||
pub fn west (callback: F) -> Self { Self::new(West, callback) }
|
||||
pub fn above (callback: F) -> Self { Self::new(Above, callback) }
|
||||
pub fn below (callback: F) -> Self { Self::new(Below, callback) }
|
||||
pub fn new (direction: Direction, callback: F) -> Self {
|
||||
Self { direction, callback, __: Default::default(), }
|
||||
}
|
||||
pub fn north (callback: F) -> Self {
|
||||
Self::new(North, callback)
|
||||
}
|
||||
pub fn south (callback: F) -> Self {
|
||||
Self::new(South, callback)
|
||||
}
|
||||
pub fn east (callback: F) -> Self {
|
||||
Self::new(East, callback)
|
||||
}
|
||||
pub fn west (callback: F) -> Self {
|
||||
Self::new(West, callback)
|
||||
}
|
||||
pub fn above (callback: F) -> Self {
|
||||
Self::new(Above, callback)
|
||||
}
|
||||
pub fn below (callback: F) -> Self {
|
||||
Self::new(Below, callback)
|
||||
}
|
||||
}
|
||||
impl<E: Output, F: Fn(&mut dyn FnMut(&dyn Render<E>)->())->()> Content<E> for Stack<E, F> {
|
||||
fn layout (&self, to: E::Area) -> E::Area {
|
||||
|
|
@ -808,6 +796,8 @@ impl<E: Output, F: Fn(&mut dyn FnMut(&dyn Render<E>)->())->()> Content<E> for St
|
|||
(self.callback)(&mut move |component: &dyn Render<E>|{
|
||||
let [_, _, w, h] = component.layout([x, y, w_remaining, h_remaining].into()).xywh();
|
||||
match self.direction {
|
||||
North | West => { todo!() },
|
||||
Above | Below => {},
|
||||
South => { y = y.plus(h);
|
||||
h_used = h_used.plus(h);
|
||||
h_remaining = h_remaining.minus(h);
|
||||
|
|
@ -816,16 +806,12 @@ impl<E: Output, F: Fn(&mut dyn FnMut(&dyn Render<E>)->())->()> Content<E> for St
|
|||
w_used = w_used.plus(w);
|
||||
w_remaining = w_remaining.minus(w);
|
||||
h_used = h_used.max(h); },
|
||||
North | West => { todo!() },
|
||||
Above | Below => {},
|
||||
_ => unreachable!(),
|
||||
}
|
||||
});
|
||||
match self.direction {
|
||||
North | West => { todo!() },
|
||||
South | East => { [to.x(), to.y(), w_used.into(), h_used.into()].into() },
|
||||
Above | Below => { [to.x(), to.y(), to.w(), to.h()].into() },
|
||||
_ => unreachable!(),
|
||||
}
|
||||
}
|
||||
fn render (&self, to: &mut E) {
|
||||
|
|
@ -836,25 +822,16 @@ impl<E: Output, F: Fn(&mut dyn FnMut(&dyn Render<E>)->())->()> Content<E> for St
|
|||
(self.callback)(&mut move |component: &dyn Render<E>|{
|
||||
let layout = component.layout([x, y, w_remaining, h_remaining].into());
|
||||
match self.direction {
|
||||
South => {
|
||||
y = y.plus(layout.h());
|
||||
h_remaining = h_remaining.minus(layout.h());
|
||||
h_used = h_used.plus(layout.h());
|
||||
to.place(layout, component);
|
||||
},
|
||||
East => {
|
||||
x = x.plus(layout.w());
|
||||
w_remaining = w_remaining.minus(layout.w());
|
||||
w_used = w_used.plus(layout.h());
|
||||
to.place(layout, component);
|
||||
},
|
||||
Above | Below => {
|
||||
to.place(layout, component);
|
||||
}
|
||||
North | West => {
|
||||
todo!()
|
||||
},
|
||||
_ => unreachable!()
|
||||
Above | Below => { to.place(layout, component); }
|
||||
North | West => { todo!() },
|
||||
South => { y = y.plus(layout.h());
|
||||
h_remaining = h_remaining.minus(layout.h());
|
||||
h_used = h_used.plus(layout.h());
|
||||
to.place(layout, component); },
|
||||
East => { x = x.plus(layout.w());
|
||||
w_remaining = w_remaining.minus(layout.w());
|
||||
w_used = w_used.plus(layout.h());
|
||||
to.place(layout, component); },
|
||||
}
|
||||
});
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue