fix: request redraw when menu item hover state changes
This commit is contained in:
parent
633e6ab83f
commit
5da2e94337
2 changed files with 15 additions and 13 deletions
|
|
@ -366,7 +366,8 @@ where
|
||||||
|
|
||||||
let mut current_offset = 0.0;
|
let mut current_offset = 0.0;
|
||||||
|
|
||||||
let previous_hover_option = self.hovered_option.take();
|
let previous_hover_option = self.hovered_option.clone();
|
||||||
|
*self.hovered_option = None;
|
||||||
|
|
||||||
for (element, elem_height) in self.options.elements().zip(heights) {
|
for (element, elem_height) in self.options.elements().zip(heights) {
|
||||||
let bounds = Rectangle {
|
let bounds = Rectangle {
|
||||||
|
|
@ -377,27 +378,23 @@ where
|
||||||
};
|
};
|
||||||
|
|
||||||
if bounds.contains(cursor_position) {
|
if bounds.contains(cursor_position) {
|
||||||
*self.hovered_option = if let OptionElement::Option((_, item)) = element
|
if let OptionElement::Option((_, item)) = element {
|
||||||
{
|
*self.hovered_option = Some(item.clone());
|
||||||
if previous_hover_option.as_ref() == Some(item) {
|
if previous_hover_option.as_ref() != Some(item) {
|
||||||
previous_hover_option
|
|
||||||
} else {
|
|
||||||
shell.request_redraw();
|
|
||||||
|
|
||||||
if let Some(on_option_hovered) = self.on_option_hovered {
|
if let Some(on_option_hovered) = self.on_option_hovered {
|
||||||
shell.publish(on_option_hovered(item.clone()));
|
shell.publish(on_option_hovered(item.clone()));
|
||||||
}
|
}
|
||||||
|
|
||||||
Some(item.clone())
|
|
||||||
}
|
}
|
||||||
} else {
|
}
|
||||||
None
|
|
||||||
};
|
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
current_offset += elem_height;
|
current_offset += elem_height;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if *self.hovered_option != previous_hover_option {
|
||||||
|
shell.request_redraw();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Event::Touch(touch::Event::FingerPressed { .. }) => {
|
Event::Touch(touch::Event::FingerPressed { .. }) => {
|
||||||
|
|
|
||||||
|
|
@ -634,6 +634,10 @@ impl<'b, Message: Clone + 'static> Menu<'b, Message> {
|
||||||
shell,
|
shell,
|
||||||
);
|
);
|
||||||
|
|
||||||
|
if view_cursor.is_over(viewport) {
|
||||||
|
shell.request_redraw();
|
||||||
|
}
|
||||||
|
|
||||||
if self.is_overlay && view_cursor.is_over(viewport) {
|
if self.is_overlay && view_cursor.is_over(viewport) {
|
||||||
shell.capture_event();
|
shell.capture_event();
|
||||||
}
|
}
|
||||||
|
|
@ -1699,6 +1703,7 @@ fn process_scroll_events<Message>(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
shell.capture_event();
|
shell.capture_event();
|
||||||
|
shell.request_redraw();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue