summaryrefslogtreecommitdiffstats
path: root/widget/src/helpers.rs
diff options
context:
space:
mode:
Diffstat (limited to 'widget/src/helpers.rs')
-rw-r--r--widget/src/helpers.rs45
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,
+ );
+ });
+ }
}
}