mirror of
https://codeberg.org/unspeaker/tengri.git
synced 2025-12-06 11:46:42 +01:00
dsl: simplify trait further
This commit is contained in:
parent
ad2d7c38b1
commit
c57117df9c
9 changed files with 395 additions and 312 deletions
|
|
@ -6,7 +6,7 @@ pub struct Stack<'x, E, F> {
|
|||
direction: Direction,
|
||||
callback: F
|
||||
}
|
||||
impl<'x, E, F: Fn(&dyn Fn(&dyn Render<E>)) + 'x> Stack<'x, E, F> {
|
||||
impl<'x, E, F: Fn(&mut dyn FnMut(&dyn Render<E>)) + 'x> Stack<'x, E, F> {
|
||||
pub fn new (direction: Direction, callback: F) -> Self {
|
||||
Self { direction, callback, __: Default::default(), }
|
||||
}
|
||||
|
|
@ -29,15 +29,15 @@ impl<'x, E, F: Fn(&dyn Fn(&dyn Render<E>)) + 'x> Stack<'x, E, F> {
|
|||
Self::new(West, callback)
|
||||
}
|
||||
}
|
||||
impl<'x, E: Output, F: Fn(&dyn Fn(&dyn Render<E>)) + 'x> Content<E> for Stack<'x, E, F> {
|
||||
impl<'x, E: Output, F: Fn(&mut dyn FnMut(&dyn Render<E>)) + 'x> Content<E> for Stack<'x, E, F> {
|
||||
fn layout (&self, to: E::Area) -> E::Area {
|
||||
let state = StackLayoutState::<E>::new(self.direction, to);
|
||||
let adder = &|component: &dyn Render<E>|{
|
||||
let mut adder = |component: &dyn Render<E>|{
|
||||
let StackLayoutState { x, y, w_remaining, h_remaining, .. } = *state.borrow();
|
||||
let [_, _, w, h] = component.layout([x, y, w_remaining, h_remaining].into()).xywh();
|
||||
state.borrow_mut().grow(w, h);
|
||||
};
|
||||
(self.callback)(&adder);
|
||||
(self.callback)(&mut adder);
|
||||
let StackLayoutState { w_used, h_used, .. } = *state.borrow();
|
||||
match self.direction {
|
||||
North | West => { todo!() },
|
||||
|
|
@ -48,13 +48,13 @@ impl<'x, E: Output, F: Fn(&dyn Fn(&dyn Render<E>)) + 'x> Content<E> for Stack<'x
|
|||
fn render (&self, to: &mut E) {
|
||||
let state = StackLayoutState::<E>::new(self.direction, to.area());
|
||||
let to = Rc::new(RefCell::new(to));
|
||||
let adder = &|component: &dyn Render<E>|{
|
||||
let mut adder = |component: &dyn Render<E>|{
|
||||
let StackLayoutState { x, y, w_remaining, h_remaining, .. } = *state.borrow();
|
||||
let layout = component.layout([x, y, w_remaining, h_remaining].into());
|
||||
state.borrow_mut().grow(layout.w(), layout.h());
|
||||
to.borrow_mut().place(layout, component);
|
||||
};
|
||||
(self.callback)(&adder);
|
||||
(self.callback)(&mut adder);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue