Remove unwraps in overlay::Nested and fix mouse_interaction
This commit is contained in:
parent
1ce047cdb3
commit
d4bb7c0b24
1 changed files with 69 additions and 51 deletions
|
|
@ -100,14 +100,25 @@ where
|
||||||
) where
|
) where
|
||||||
Renderer: renderer::Renderer,
|
Renderer: renderer::Renderer,
|
||||||
{
|
{
|
||||||
let layout = layouts.next().unwrap();
|
if let Some(layout) = layouts.next() {
|
||||||
|
renderer.with_layer(layout.bounds(), |renderer| {
|
||||||
|
element.draw(renderer, theme, style, layout, cursor);
|
||||||
|
});
|
||||||
|
|
||||||
renderer.with_layer(layout.bounds(), |renderer| {
|
renderer.with_layer(layout.bounds(), |renderer| {
|
||||||
element.draw(renderer, theme, style, layout, cursor);
|
element.draw(renderer, theme, style, layout, cursor);
|
||||||
});
|
});
|
||||||
|
|
||||||
if let Some(mut overlay) = element.overlay(layout, renderer) {
|
if let Some(mut overlay) = element.overlay(layout, renderer) {
|
||||||
recurse(&mut overlay, layouts, renderer, theme, style, cursor);
|
recurse(
|
||||||
|
&mut overlay,
|
||||||
|
layouts,
|
||||||
|
renderer,
|
||||||
|
theme,
|
||||||
|
style,
|
||||||
|
cursor,
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -132,12 +143,12 @@ where
|
||||||
) where
|
) where
|
||||||
Renderer: renderer::Renderer,
|
Renderer: renderer::Renderer,
|
||||||
{
|
{
|
||||||
let layout = layouts.next().unwrap();
|
if let Some(layout) = layouts.next() {
|
||||||
|
element.operate(layout, renderer, operation);
|
||||||
|
|
||||||
element.operate(layout, renderer, operation);
|
if let Some(mut overlay) = element.overlay(layout, renderer) {
|
||||||
|
recurse(&mut overlay, layouts, renderer, operation);
|
||||||
if let Some(mut overlay) = element.overlay(layout, renderer) {
|
}
|
||||||
recurse(&mut overlay, layouts, renderer, operation);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -167,10 +178,10 @@ where
|
||||||
where
|
where
|
||||||
Renderer: renderer::Renderer,
|
Renderer: renderer::Renderer,
|
||||||
{
|
{
|
||||||
let layout = layouts.next().unwrap();
|
if let Some(layout) = layouts.next() {
|
||||||
|
let status = if let Some(mut overlay) =
|
||||||
let status =
|
element.overlay(layout, renderer)
|
||||||
if let Some(mut overlay) = element.overlay(layout, renderer) {
|
{
|
||||||
recurse(
|
recurse(
|
||||||
&mut overlay,
|
&mut overlay,
|
||||||
layouts,
|
layouts,
|
||||||
|
|
@ -184,11 +195,15 @@ where
|
||||||
event::Status::Ignored
|
event::Status::Ignored
|
||||||
};
|
};
|
||||||
|
|
||||||
if matches!(status, event::Status::Ignored) {
|
if matches!(status, event::Status::Ignored) {
|
||||||
element
|
element.on_event(
|
||||||
.on_event(event, layout, cursor, renderer, clipboard, shell)
|
event, layout, cursor, renderer, clipboard, shell,
|
||||||
|
)
|
||||||
|
} else {
|
||||||
|
status
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
status
|
event::Status::Ignored
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -218,41 +233,44 @@ where
|
||||||
cursor: mouse::Cursor,
|
cursor: mouse::Cursor,
|
||||||
viewport: &Rectangle,
|
viewport: &Rectangle,
|
||||||
renderer: &Renderer,
|
renderer: &Renderer,
|
||||||
) -> mouse::Interaction
|
) -> Option<mouse::Interaction>
|
||||||
where
|
where
|
||||||
Renderer: renderer::Renderer,
|
Renderer: renderer::Renderer,
|
||||||
{
|
{
|
||||||
let layout = layouts.next().unwrap();
|
let layout = layouts.next()?;
|
||||||
|
let cursor_position = cursor.position()?;
|
||||||
|
|
||||||
if let Some(cursor_position) = cursor.position() {
|
if !element.is_over(layout, renderer, cursor_position) {
|
||||||
match element.overlay(layout, renderer) {
|
return None;
|
||||||
Some(mut overlay)
|
}
|
||||||
if overlay.is_over(
|
|
||||||
layout,
|
Some(
|
||||||
renderer,
|
element
|
||||||
cursor_position,
|
.overlay(layout, renderer)
|
||||||
) =>
|
.and_then(|mut overlay| {
|
||||||
{
|
recurse(
|
||||||
return recurse(
|
|
||||||
&mut overlay,
|
&mut overlay,
|
||||||
layouts,
|
layouts,
|
||||||
cursor,
|
cursor,
|
||||||
viewport,
|
viewport,
|
||||||
renderer,
|
renderer,
|
||||||
);
|
)
|
||||||
}
|
})
|
||||||
_ => {}
|
.unwrap_or_else(|| {
|
||||||
}
|
element.mouse_interaction(
|
||||||
}
|
layout, cursor, viewport, renderer,
|
||||||
|
)
|
||||||
element.mouse_interaction(layout, cursor, viewport, renderer)
|
}),
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
self.overlay.with_element_mut(|element| {
|
self.overlay
|
||||||
let layouts = layout.children();
|
.with_element_mut(|element| {
|
||||||
|
let layouts = layout.children();
|
||||||
|
|
||||||
recurse(element, layouts, cursor, viewport, renderer)
|
recurse(element, layouts, cursor, viewport, renderer)
|
||||||
})
|
})
|
||||||
|
.unwrap_or_default()
|
||||||
}
|
}
|
||||||
|
|
||||||
fn is_over(
|
fn is_over(
|
||||||
|
|
@ -270,16 +288,16 @@ where
|
||||||
where
|
where
|
||||||
Renderer: renderer::Renderer,
|
Renderer: renderer::Renderer,
|
||||||
{
|
{
|
||||||
let layout = layouts.next().unwrap();
|
if let Some(layout) = layouts.next() {
|
||||||
|
if element.is_over(layout, renderer, cursor_position) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
let is_over = element.is_over(layout, renderer, cursor_position);
|
if let Some(mut overlay) = element.overlay(layout, renderer) {
|
||||||
|
recurse(&mut overlay, layouts, renderer, cursor_position)
|
||||||
if is_over {
|
} else {
|
||||||
return true;
|
false
|
||||||
}
|
}
|
||||||
|
|
||||||
if let Some(mut overlay) = element.overlay(layout, renderer) {
|
|
||||||
recurse(&mut overlay, layouts, renderer, cursor_position)
|
|
||||||
} else {
|
} else {
|
||||||
false
|
false
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue