From 53bec137e8b07aa16e66e7e7b1f8436ec45a95da Mon Sep 17 00:00:00 2001 From: Latidoremi Date: Thu, 3 Aug 2023 23:21:35 +0800 Subject: [PATCH] Minor fix --- examples/menu/src/main.rs | 207 +++------------------------------- src/native/menu/menu_inner.rs | 44 ++++---- 2 files changed, 36 insertions(+), 215 deletions(-) diff --git a/examples/menu/src/main.rs b/examples/menu/src/main.rs index 9db00e50..f7356813 100644 --- a/examples/menu/src/main.rs +++ b/examples/menu/src/main.rs @@ -175,7 +175,7 @@ impl Application for App { SizeOption::Uniform => { menu_bar!(menu_1(self), menu_2(self), menu_3(self), menu_4(self)) .item_width(ItemWidth::Uniform(180)) - .item_height(ItemHeight::Uniform(25)) + .item_height(ItemHeight::Uniform(27)) } SizeOption::Static => menu_bar!( menu_1(self), @@ -185,16 +185,16 @@ impl Application for App { menu_5(self), ) .item_width(ItemWidth::Static(180)) - .item_height(ItemHeight::Static(25)), + .item_height(ItemHeight::Static(35)), SizeOption::DynamicHeight => menu_bar!( menu_1(self), menu_2(self), menu_3(self), - menu_44(self), - menu_55(self), + menu_4(self), + menu_6(self), ) .item_width(ItemWidth::Static(180)) - .item_height(ItemHeight::Dynamic(32)), + .item_height(ItemHeight::Dynamic(35)), } .spacing(4.0) .bounds_expand(30) @@ -348,46 +348,6 @@ fn debug_sub_menu<'a>( sub_menu(label, Message::Debug(label.into()), children) } -fn sub_menu2<'a>( - label: &str, - msg: Message, - children: Vec>, -) -> MenuTree<'a, Message, iced::Renderer> { - let handle = svg::Handle::from_path(format!( - "{}/caret-right-fill.svg", - env!("CARGO_MANIFEST_DIR") - )); - let arrow = svg(handle) - .width(Length::Shrink) - .style(theme::Svg::custom_fn(|theme| svg::Appearance { - color: Some(theme.extended_palette().background.base.text), - })); - - menu_tree( - base_button( - row![ - text(label) - .width(Length::Fill) - .height(Length::Shrink) - .vertical_alignment(alignment::Vertical::Center), - arrow - ] - .align_items(iced::Alignment::Center), - msg, - ) - .width(Length::Fill) - .height(Length::Shrink), - children, - ) -} - -fn debug_sub_menu2<'a>( - label: &str, - children: Vec>, -) -> MenuTree<'a, Message, iced::Renderer> { - sub_menu2(label, Message::Debug(label.into()), children) -} - fn separator<'a>() -> MenuTree<'a, Message, iced::Renderer> { menu_tree!(quad::Quad { color: [0.5; 3].into(), @@ -761,146 +721,6 @@ fn menu_4<'a>(_app: &App) -> MenuTree<'a, Message, iced::Renderer> { root } -fn menu_44<'a>(_app: &App) -> MenuTree<'a, Message, iced::Renderer> { - let dekjdaud = debug_sub_menu2( - "dekjdaud", - vec![ - debug_item2("ajrs"), - debug_item2("bsdfho"), - debug_item2("clkjhbf"), - debug_item2("dekjdaud"), - debug_item2("ecsh"), - debug_item2("fweiu"), - debug_item2("giwe"), - debug_item2("heruyv"), - debug_item2("isabe"), - debug_item2("jcsu"), - debug_item2("kaljkahd"), - debug_item2("luyortp"), - debug_item2("mmdyrc"), - debug_item2("nquc"), - debug_item2("ajrs"), - debug_item2("bsdfho"), - debug_item2("clkjhbf"), - debug_item2("dekjdaud"), - debug_item2("ecsh"), - debug_item2("fweiu"), - debug_item2("giwe"), - debug_item2("heruyv"), - debug_item2("isabe"), - debug_item2("jcsu"), - debug_item2("kaljkahd"), - debug_item2("luyortp"), - debug_item2("mmdyrc"), - debug_item2("nquc"), - ], - ); - - let luyortp = debug_sub_menu2( - "luyortp", - vec![ - debug_item2("ajrs"), // 0 - debug_item2("bsdfho"), - debug_item2("clkjhbf"), - debug_item2("dekjdaud"), - debug_item2("ecsh"), - debug_item2("fweiu"), - debug_item2("giwe"), - debug_item2("heruyv"), - debug_item2("isabe"), - debug_item2("jcsu"), - debug_item2("kaljkahd"), - debug_item2("luyortp"), - debug_item2("mmdyrc"), - debug_item2("nquc"), // 13 - ], - ); - - let jcsu = debug_sub_menu2( - "jcsu", - vec![ - debug_item2("ajrs"), // 0 - debug_item2("bsdfho"), - debug_item2("clkjhbf"), - debug_item2("dekjdaud"), - debug_item2("ecsh"), - debug_item2("fweiu"), - debug_item2("giwe"), - debug_item2("heruyv"), - debug_item2("isabe"), - debug_item2("jcsu"), - debug_item2("kaljkahd"), - luyortp, // 11 - debug_item2("mmdyrc"), - debug_item2("nquc"), // 13 - ], - ); - - let root = menu_tree( - debug_button("Scroll"), - vec![ - debug_item2("ajrs"), // 0 - debug_item2("bsdfho"), - debug_item2("clkjhbf"), - debug_item2("dekjdaud"), - debug_item2("ecsh"), - debug_item2("fweiu"), - debug_item2("giwe"), - debug_item2("heruyv"), - debug_item2("isabe"), - jcsu, // 9 - debug_item2("kaljkahd"), - debug_item2("luyortp"), - debug_item2("mmdyrc"), - debug_item2("nquc"), // 13 - debug_item2("ajrs"), // 14 - debug_item2("bsdfho"), - debug_item2("clkjhbf"), - debug_item2("dekjdaud"), - debug_item2("ecsh"), - debug_item2("fweiu"), - debug_item2("giwe"), - debug_item2("heruyv"), - debug_item2("isabe"), - debug_item2("jcsu"), - debug_item2("kaljkahd"), - debug_item2("luyortp"), - debug_item2("mmdyrc"), - debug_item2("nquc"), // 27 - debug_item2("ajrs"), // 28 - debug_item2("bsdfho"), - debug_item2("clkjhbf"), - dekjdaud, - debug_item2("ecsh"), - debug_item2("fweiu"), - debug_item2("giwe"), - debug_item2("heruyv"), - debug_item2("isabe"), - debug_item2("jcsu"), - debug_item2("kaljkahd"), - debug_item2("luyortp"), - debug_item2("mmdyrc"), - debug_item2("nquc"), // 41 - debug_item2("ajrs"), // 42 - debug_item2("bsdfho"), - debug_item2("clkjhbf"), - debug_item2("dekjdaud"), - debug_item2("ecsh"), - debug_item2("fweiu"), - debug_item2("giwe"), - debug_item2("heruyv"), - debug_item2("isabe"), - debug_item2("jcsu"), - debug_item2("kaljkahd"), // 52 - debug_item2("luyortp"), - debug_item2("mmdyrc"), - debug_item2("nquc"), // 55 - ], - ); - - root -} - fn menu_5<'a>(app: &App) -> MenuTree<'a, Message, iced::Renderer> { let slider_count = 3; let slider_width = 30; @@ -934,7 +754,7 @@ fn menu_5<'a>(app: &App) -> MenuTree<'a, Message, iced::Renderer> { root } -fn menu_55<'a>(app: &App) -> MenuTree<'a, Message, iced::Renderer> { +fn menu_6<'a>(app: &App) -> MenuTree<'a, Message, iced::Renderer> { let slider_count = 3; let slider_width = 30; let spacing = 4; @@ -945,30 +765,29 @@ fn menu_55<'a>(app: &App) -> MenuTree<'a, Message, iced::Renderer> { vertical_slider(0..=255, r, move |x| Message::ColorChange(Color::from_rgb8( x, g, b ))) - .height(80) .width(30), vertical_slider(0..=255, g, move |x| Message::ColorChange(Color::from_rgb8( r, x, b ))) - .height(80) .width(30), vertical_slider(0..=255, b, move |x| Message::ColorChange(Color::from_rgb8( r, g, x ))) - .height(80) .width(30), ] - .spacing(4)) - .height(100); + .spacing(4) + .height(100)); let root = menu_tree( debug_button("Dynamic Height"), vec![ labeled_separator("Primary"), sliders, - debug_item2("AABB"), // .height(80) - debug_item3("CCDD", 50.0), // .height(60) - debug_item2("EEFF"), // .height(50) + debug_item2("AABB"), + debug_item3("CCDD", 50.0), + debug_item2("EEFF"), + debug_item("GGHH").height(100), + debug_item2("IIJJ"), ], ) .width(slider_width * slider_count + (slider_count - 1) * spacing); diff --git a/src/native/menu/menu_inner.rs b/src/native/menu/menu_inner.rs index f3eda2f2..695d94a3 100644 --- a/src/native/menu/menu_inner.rs +++ b/src/native/menu/menu_inner.rs @@ -42,14 +42,19 @@ pub enum ItemWidth { /// The height of an item #[derive(Debug, Clone, Copy)] pub enum ItemHeight { - /// Use uniform height + /// Use uniform height. Uniform(u16), - /// Static tries to use the height value of each menu tree, - /// if that value is None, - /// the default value will be used instead, - /// which is the value of the Static variant + /// Static tries to use `MenuTree.height` as item height, + /// when it's `None` it'll fallback to the value of the `Static` variant. Static(u16), - /// Dynamic item height + /// Dynamic tries to automatically choose the proper item height for you, + /// but it only works in certain cases: + /// + /// - Fixed height + /// - Shrink height + /// - Menu tree height + /// + /// If none of these is the case, it'll fallback to the value of the `Dynamic` variant. Dynamic(u16), } @@ -232,7 +237,7 @@ impl MenuBounds { Renderer: renderer::Renderer, { let (children_size, child_positions, child_sizes) = - get_children_layout(menu_tree, renderer, viewport_size, item_width, item_height); + get_children_layout(menu_tree, renderer, item_width, item_height); // viewport space parent bounds let view_parent_bounds = parent_bounds + overlay_offset; @@ -368,14 +373,7 @@ impl MenuState { let positions = &self.menu_bounds.child_positions; let sizes = &self.menu_bounds.child_sizes; - let start_index = search_bound( - 0, - 0, - max_index, - lower_bound_rel, - positions, - sizes, - ); + let start_index = search_bound(0, 0, max_index, lower_bound_rel, positions, sizes); let end_index = search_bound( max_index, start_index, @@ -597,8 +595,7 @@ where let draw_menu = |r: &mut Renderer| { // calc slice - let slice = - ms.slice(viewport_size, overlay_offset, self.item_height); + let slice = ms.slice(viewport_size, overlay_offset, self.item_height); let start_index = slice.start_index; let end_index = slice.end_index; @@ -1069,7 +1066,6 @@ where fn get_children_layout( menu_tree: &MenuTree<'_, Message, Renderer>, renderer: &Renderer, - viewport_size: Size, item_width: ItemWidth, item_height: ItemHeight, ) -> (Size, Vec, Vec) @@ -1102,12 +1098,12 @@ where let l_height = w .layout( renderer, - &Limits::new(Size::ZERO, Size::new(width, viewport_size.height)), + &Limits::new(Size::ZERO, Size::new(width, f32::MAX)), ) .size() .height; - let height = if (viewport_size.height - l_height).abs() < 0.0001 { + let height = if (f32::MAX - l_height) < 0.001 { d as f32 } else { l_height @@ -1115,7 +1111,13 @@ where Size::new(width, height) } - _ => Size::new(width, d as f32), + _ => { + if let Some(h) = mt.height { + Size::new(width, h as f32) + } else { + Size::new(width, d as f32) + } + } } }) .collect(),