summaryrefslogtreecommitdiffstats
path: root/widget/src/button.rs
diff options
context:
space:
mode:
Diffstat (limited to 'widget/src/button.rs')
-rw-r--r--widget/src/button.rs19
1 files changed, 17 insertions, 2 deletions
diff --git a/widget/src/button.rs b/widget/src/button.rs
index d16e8c67..867fbfaf 100644
--- a/widget/src/button.rs
+++ b/widget/src/button.rs
@@ -61,6 +61,7 @@ where
width: Length,
height: Length,
padding: Padding,
+ clip: bool,
style: Theme::Style,
}
@@ -82,6 +83,7 @@ where
width: size.width.fluid(),
height: size.height.fluid(),
padding: Padding::new(5.0),
+ clip: false,
style: Theme::Style::default(),
}
}
@@ -126,6 +128,13 @@ where
self.style = style.into();
self
}
+
+ /// Sets whether the contents of the [`Button`] should be clipped on
+ /// overflow.
+ pub fn clip(mut self, clip: bool) -> Self {
+ self.clip = clip;
+ self
+ }
}
impl<'a, Message, Theme, Renderer> Widget<Message, Theme, Renderer>
@@ -227,7 +236,7 @@ where
_style: &renderer::Style,
layout: Layout<'_>,
cursor: mouse::Cursor,
- _viewport: &Rectangle,
+ viewport: &Rectangle,
) {
let bounds = layout.bounds();
let content_layout = layout.children().next().unwrap();
@@ -242,6 +251,12 @@ where
|| tree.state.downcast_ref::<State>(),
);
+ let viewport = if self.clip {
+ bounds.intersection(viewport).unwrap_or(*viewport)
+ } else {
+ *viewport
+ };
+
self.content.as_widget().draw(
&tree.children[0],
renderer,
@@ -251,7 +266,7 @@ where
},
content_layout,
cursor,
- &bounds,
+ &viewport,
);
}