Remove unwraps in overlay::Nested and fix mouse_interaction

This commit is contained in:
Cory Forsstrom 2023-02-18 15:06:44 -08:00 committed by Héctor Ramón Jiménez
parent 1ce047cdb3
commit d4bb7c0b24
No known key found for this signature in database
GPG key ID: 140CC052C94F138E

View file

@ -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
} }