Skip to content

Commit

Permalink
Minor fix
Browse files Browse the repository at this point in the history
  • Loading branch information
latidoremi committed Aug 4, 2023
1 parent 73fa6b6 commit 53bec13
Show file tree
Hide file tree
Showing 2 changed files with 36 additions and 215 deletions.
207 changes: 13 additions & 194 deletions examples/menu/src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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),
Expand All @@ -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)
Expand Down Expand Up @@ -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>>,
) -> 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>>,
) -> 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(),
Expand Down Expand Up @@ -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;
Expand Down Expand Up @@ -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;
Expand All @@ -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);
Expand Down
44 changes: 23 additions & 21 deletions src/native/menu/menu_inner.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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),
}

Expand Down Expand Up @@ -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;
Expand Down Expand Up @@ -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,
Expand Down Expand Up @@ -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;

Expand Down Expand Up @@ -1069,7 +1066,6 @@ where
fn get_children_layout<Message, Renderer>(
menu_tree: &MenuTree<'_, Message, Renderer>,
renderer: &Renderer,
viewport_size: Size,
item_width: ItemWidth,
item_height: ItemHeight,
) -> (Size, Vec<f32>, Vec<Size>)
Expand Down Expand Up @@ -1102,20 +1098,26 @@ 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

Check failure on line 1107 in src/native/menu/menu_inner.rs

View workflow job for this annotation

GitHub Actions / all

casting `u16` to `f32` may become silently lossy if you later change the type
} else {
l_height
};

Size::new(width, height)
}
_ => Size::new(width, d as f32),
_ => {
if let Some(h) = mt.height {

Check failure on line 1115 in src/native/menu/menu_inner.rs

View workflow job for this annotation

GitHub Actions / all

use Option::map_or_else instead of an if let/else
Size::new(width, h as f32)

Check failure on line 1116 in src/native/menu/menu_inner.rs

View workflow job for this annotation

GitHub Actions / all

casting `u16` to `f32` may become silently lossy if you later change the type
} else {
Size::new(width, d as f32)
}
}
}
})
.collect(),
Expand Down

0 comments on commit 53bec13

Please sign in to comment.