Fix overlay behavior in hover widget
This commit is contained in:
parent
a16a75a71d
commit
40dff6b23d
1 changed files with 14 additions and 11 deletions
|
|
@ -313,7 +313,7 @@ where
|
||||||
struct Hover<'a, Message, Theme, Renderer> {
|
struct Hover<'a, Message, Theme, Renderer> {
|
||||||
base: Element<'a, Message, Theme, Renderer>,
|
base: Element<'a, Message, Theme, Renderer>,
|
||||||
top: Element<'a, Message, Theme, Renderer>,
|
top: Element<'a, Message, Theme, Renderer>,
|
||||||
is_overlay_active: bool,
|
is_top_overlay_active: bool,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<'a, Message, Theme, Renderer> Widget<Message, Theme, Renderer>
|
impl<'a, Message, Theme, Renderer> Widget<Message, Theme, Renderer>
|
||||||
|
|
@ -387,7 +387,7 @@ where
|
||||||
viewport,
|
viewport,
|
||||||
);
|
);
|
||||||
|
|
||||||
if cursor.is_over(layout.bounds()) || self.is_overlay_active {
|
if cursor.is_over(layout.bounds()) || self.is_top_overlay_active {
|
||||||
let (top_layout, top_tree) = children.next().unwrap();
|
let (top_layout, top_tree) = children.next().unwrap();
|
||||||
|
|
||||||
renderer.with_layer(layout.bounds(), |renderer| {
|
renderer.with_layer(layout.bounds(), |renderer| {
|
||||||
|
|
@ -491,13 +491,10 @@ where
|
||||||
translation: core::Vector,
|
translation: core::Vector,
|
||||||
) -> Option<core::overlay::Element<'b, Message, Theme, Renderer>>
|
) -> Option<core::overlay::Element<'b, Message, Theme, Renderer>>
|
||||||
{
|
{
|
||||||
let overlay = [&mut self.base, &mut self.top]
|
let mut overlays = [&mut self.base, &mut self.top]
|
||||||
.into_iter()
|
.into_iter()
|
||||||
.rev()
|
.zip(layout.children().zip(tree.children.iter_mut()))
|
||||||
.zip(
|
.map(|(child, (layout, tree))| {
|
||||||
layout.children().rev().zip(tree.children.iter_mut().rev()),
|
|
||||||
)
|
|
||||||
.find_map(|(child, (layout, tree))| {
|
|
||||||
child.as_widget_mut().overlay(
|
child.as_widget_mut().overlay(
|
||||||
tree,
|
tree,
|
||||||
layout,
|
layout,
|
||||||
|
|
@ -506,15 +503,21 @@ where
|
||||||
)
|
)
|
||||||
});
|
});
|
||||||
|
|
||||||
self.is_overlay_active = overlay.is_some();
|
if let Some(base_overlay) = overlays.next()? {
|
||||||
overlay
|
return Some(base_overlay);
|
||||||
|
}
|
||||||
|
|
||||||
|
let top_overlay = overlays.next()?;
|
||||||
|
self.is_top_overlay_active = top_overlay.is_some();
|
||||||
|
|
||||||
|
top_overlay
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Element::new(Hover {
|
Element::new(Hover {
|
||||||
base: base.into(),
|
base: base.into(),
|
||||||
top: top.into(),
|
top: top.into(),
|
||||||
is_overlay_active: false,
|
is_top_overlay_active: false,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue