diff --git a/iced b/iced index 70d104a2..717bc5db 160000 --- a/iced +++ b/iced @@ -1 +1 @@ -Subproject commit 70d104a28a87f06eb46d76268b6fa18c407ee2c2 +Subproject commit 717bc5dbfbc8f78e367e08e76a9572ee0ebc1f32 diff --git a/src/widget/menu/menu_inner.rs b/src/widget/menu/menu_inner.rs index f410905e..8ebca090 100644 --- a/src/widget/menu/menu_inner.rs +++ b/src/widget/menu/menu_inner.rs @@ -317,10 +317,7 @@ impl MenuState { upper_bound_rel, } = slice; - // assert_eq!( - // menu_tree.children.len(), - // self.menu_bounds.child_positions.len() - // ); + debug_assert_eq!(menu_tree.len(), self.menu_bounds.child_positions.len()); // viewport space children bounds let children_bounds = self.menu_bounds.children_bounds + overlay_offset; @@ -470,7 +467,7 @@ impl<'b, Message: Clone + 'static> Menu<'b, Message> { let overlay_offset = Point::ORIGIN - position; let tree_children: &mut Vec = &mut data.tree.children; - + let children = (if self.is_overlay { 0 } else { self.depth }..=if self.is_overlay { data.active_root.len() - 1 } else { @@ -480,23 +477,27 @@ impl<'b, Message: Clone + 'static> Menu<'b, Message> { if self.menu_roots.is_empty() { return (&empty, vec![]); } - let (active_tree, roots) = data.active_root[..=active_root] - .iter() - .skip(1) - .fold( + let (active_tree, roots) = + data.active_root[..=active_root].iter().skip(1).fold( ( &mut tree_children[data.active_root[0]].children, &self.menu_roots[data.active_root[0]].children, ), - |(tree, mt), next_active_root| { - (tree, &mt[*next_active_root].children) - }, + |(tree, mt), next_active_root| (tree, &mt[*next_active_root].children), ); - data.menu_states[if self.is_overlay {0} else {self.depth}..=if self.is_overlay{data.active_root.len() - 1} else {self.depth}].iter() - .enumerate() - .filter(|ms| self.is_overlay || ms.0 < 1) - .fold((roots, Vec::new()), |(menu_root, mut nodes), (_i, ms)| { + data.menu_states[if self.is_overlay { 0 } else { self.depth } + ..=if self.is_overlay { + data.active_root.len() - 1 + } else { + self.depth + }] + .iter() + .enumerate() + .filter(|ms| self.is_overlay || ms.0 < 1) + .fold( + (roots, Vec::new()), + |(menu_root, mut nodes), (_i, ms)| { let slice = ms.slice(limits.max(), overlay_offset, self.item_height); let _start_index = slice.start_index; @@ -520,9 +521,12 @@ impl<'b, Message: Clone + 'static> Menu<'b, Message> { .map_or(menu_root, |active| &menu_root[active].children), nodes, ) - }) - - }).map(|(_, l)| l).next().unwrap_or_default(); + }, + ) + }) + .map(|(_, l)| l) + .next() + .unwrap_or_default(); // overlay space viewport rectangle Node::with_children( @@ -936,7 +940,6 @@ impl Widget Widget( main_offset: f32, ) { menu.tree.inner.with_data_mut(|state| { - if !(state.menu_states.get(menu.depth).is_none() && (!menu.is_overlay || bar_bounds.contains(overlay_cursor))) || menu.depth > 0 @@ -1331,7 +1337,6 @@ where let mut new_menu_root = None; menu.tree.inner.with_data_mut(|state| { - /* When overlay is running, cursor_position in any widget method will go negative but I still want Widget::draw() to react to cursor movement */