Fixes for menu

- Invalidate layout when menu is opened
- Align tree with menu widget when handling menu events
This commit is contained in:
Jeremy Soller 2024-01-09 10:05:45 -07:00
parent 98d6d67ab9
commit 5b2ac941c3

View file

@ -552,6 +552,7 @@ where
init_root_menu( init_root_menu(
self, self,
renderer, renderer,
shell,
overlay_cursor, overlay_cursor,
viewport_size, viewport_size,
overlay_offset, overlay_offset,
@ -750,6 +751,7 @@ fn pad_rectangle(rect: Rectangle, padding: Padding) -> Rectangle {
fn init_root_menu<Message, Renderer>( fn init_root_menu<Message, Renderer>(
menu: &mut Menu<'_, '_, Message, Renderer>, menu: &mut Menu<'_, '_, Message, Renderer>,
renderer: &Renderer, renderer: &Renderer,
shell: &mut Shell<'_, Message>,
overlay_cursor: Point, overlay_cursor: Point,
viewport_size: Size, viewport_size: Size,
overlay_offset: Vector, overlay_offset: Vector,
@ -815,6 +817,9 @@ fn init_root_menu<Message, Renderer>(
menu_bounds, menu_bounds,
}); });
// Hack to ensure menu opens properly
shell.invalidate_layout();
break; break;
} }
} }
@ -852,25 +857,20 @@ where
.iter() .iter()
.fold(&mut menu_roots[active_root], |mt, &i| &mut mt.children[i]); .fold(&mut menu_roots[active_root], |mt, &i| &mut mt.children[i]);
// widget tree
let tree = &mut tree.children[active_root].children[mt.index];
// get layout // get layout
let last_ms = &state.menu_states[indices.len() - 1]; let last_ms = &state.menu_states[indices.len() - 1];
let last_tree = tree.children[active_root]
.children
.iter_mut()
.last()
.unwrap();
let child_node = last_ms.layout_single( let child_node = last_ms.layout_single(
overlay_offset, overlay_offset,
last_ms.index.expect("missing index within menu state."), last_ms.index.expect("missing index within menu state."),
renderer, renderer,
mt, mt,
last_tree, tree,
); );
let child_layout = Layout::new(&child_node); let child_layout = Layout::new(&child_node);
// widget tree
let tree = &mut tree.children[active_root].children[mt.index];
// process only the last widget // process only the last widget
mt.item.as_widget_mut().on_event( mt.item.as_widget_mut().on_event(
tree, tree,