diff options
author | 2024-04-27 11:21:18 +0200 | |
---|---|---|
committer | 2024-04-27 11:21:18 +0200 | |
commit | 9c0f2dc9a5ea172afd27b13d55dead40098eb7e3 (patch) | |
tree | 5a857a830359785803a7541b62ca6a4ccfe1669c /widget | |
parent | 95ac45e33d8490f0cc5c3cdea80be78f338d44e5 (diff) | |
download | iced-9c0f2dc9a5ea172afd27b13d55dead40098eb7e3.tar.gz iced-9c0f2dc9a5ea172afd27b13d55dead40098eb7e3.tar.bz2 iced-9c0f2dc9a5ea172afd27b13d55dead40098eb7e3.zip |
Fix top layer clipping in `hover` widget
Diffstat (limited to 'widget')
-rw-r--r-- | widget/src/helpers.rs | 45 |
1 files changed, 24 insertions, 21 deletions
diff --git a/widget/src/helpers.rs b/widget/src/helpers.rs index 5f27b680..3940e389 100644 --- a/widget/src/helpers.rs +++ b/widget/src/helpers.rs @@ -375,29 +375,32 @@ where cursor: mouse::Cursor, viewport: &Rectangle, ) { - let mut children = layout.children().zip(&tree.children); + if let Some(bounds) = layout.bounds().intersection(viewport) { + let mut children = layout.children().zip(&tree.children); - let (base_layout, base_tree) = children.next().unwrap(); - - self.base.as_widget().draw( - base_tree, - renderer, - theme, - style, - base_layout, - cursor, - viewport, - ); - - if cursor.is_over(layout.bounds()) || self.is_top_overlay_active { - let (top_layout, top_tree) = children.next().unwrap(); + let (base_layout, base_tree) = children.next().unwrap(); - renderer.with_layer(layout.bounds(), |renderer| { - self.top.as_widget().draw( - top_tree, renderer, theme, style, top_layout, cursor, - viewport, - ); - }); + self.base.as_widget().draw( + base_tree, + renderer, + theme, + style, + base_layout, + cursor, + viewport, + ); + + if cursor.is_over(layout.bounds()) || self.is_top_overlay_active + { + let (top_layout, top_tree) = children.next().unwrap(); + + renderer.with_layer(bounds, |renderer| { + self.top.as_widget().draw( + top_tree, renderer, theme, style, top_layout, + cursor, viewport, + ); + }); + } } } |