Menu: align tree in MenuBounds

This commit is contained in:
Jeremy Soller 2023-12-06 08:15:02 -07:00
parent c2aae2e79b
commit 4b8fb4646b

View file

@ -248,17 +248,13 @@ impl MenuBounds {
aod: &Aod, aod: &Aod,
bounds_expand: u16, bounds_expand: u16,
parent_bounds: Rectangle, parent_bounds: Rectangle,
tree: &mut [Tree],
) -> Self ) -> Self
where where
Renderer: renderer::Renderer, Renderer: renderer::Renderer,
{ {
let (children_size, child_positions, child_sizes) = get_children_layout( let (children_size, child_positions, child_sizes) =
menu_tree, get_children_layout(menu_tree, renderer, item_width, item_height, tree);
renderer,
item_width,
item_height,
&mut Tree::new(&menu_tree.item),
);
// viewport space parent bounds // viewport space parent bounds
let view_parent_bounds = parent_bounds + overlay_offset; let view_parent_bounds = parent_bounds + overlay_offset;
@ -809,6 +805,7 @@ fn init_root_menu<Message, Renderer>(
&aod, &aod,
menu.bounds_expand, menu.bounds_expand,
root_bounds, root_bounds,
&mut menu.tree.children[i].children,
); );
state.active_root = Some(i); state.active_root = Some(i);
@ -1072,6 +1069,7 @@ where
&aod, &aod,
menu.bounds_expand, menu.bounds_expand,
item_bounds, item_bounds,
&mut menu.tree.children[active_root].children,
), ),
}); });
} }
@ -1163,7 +1161,7 @@ fn get_children_layout<Message, Renderer>(
renderer: &Renderer, renderer: &Renderer,
item_width: ItemWidth, item_width: ItemWidth,
item_height: ItemHeight, item_height: ItemHeight,
tree: &mut Tree, tree: &mut [Tree],
) -> (Size, Vec<f32>, Vec<Size>) ) -> (Size, Vec<f32>, Vec<Size>)
where where
Renderer: renderer::Renderer, Renderer: renderer::Renderer,
@ -1186,15 +1184,14 @@ where
ItemHeight::Dynamic(d) => menu_tree ItemHeight::Dynamic(d) => menu_tree
.children .children
.iter() .iter()
.zip(tree.children.iter_mut()) .map(|mt| {
.map(|(mt, tree)| {
let w = mt.item.as_widget(); let w = mt.item.as_widget();
match w.height() { match w.height() {
Length::Fixed(f) => Size::new(width, f), Length::Fixed(f) => Size::new(width, f),
Length::Shrink => { Length::Shrink => {
let l_height = w let l_height = w
.layout( .layout(
tree, &mut tree[mt.index],
renderer, renderer,
&Limits::new(Size::ZERO, Size::new(width, f32::MAX)), &Limits::new(Size::ZERO, Size::new(width, f32::MAX)),
) )