summaryrefslogtreecommitdiffstats
path: root/widget/src/row.rs
diff options
context:
space:
mode:
Diffstat (limited to 'widget/src/row.rs')
-rw-r--r--widget/src/row.rs23
1 files changed, 21 insertions, 2 deletions
diff --git a/widget/src/row.rs b/widget/src/row.rs
index 7f8c3354..460b6b0c 100644
--- a/widget/src/row.rs
+++ b/widget/src/row.rs
@@ -18,6 +18,7 @@ pub struct Row<'a, Message, Theme = crate::Theme, Renderer = crate::Renderer> {
width: Length,
height: Length,
align_items: Alignment,
+ clip: bool,
children: Vec<Element<'a, Message, Theme, Renderer>>,
}
@@ -33,6 +34,7 @@ where
width: Length::Shrink,
height: Length::Shrink,
align_items: Alignment::Start,
+ clip: false,
children: Vec::new(),
}
}
@@ -78,6 +80,13 @@ where
self
}
+ /// Sets whether the contents of the [`Column`] should be clipped on
+ /// overflow.
+ pub fn clip(mut self, clip: bool) -> Self {
+ self.clip = clip;
+ self
+ }
+
/// Adds an [`Element`] to the [`Row`].
pub fn push(
mut self,
@@ -229,7 +238,7 @@ where
cursor: mouse::Cursor,
viewport: &Rectangle,
) {
- if let Some(viewport) = layout.bounds().intersection(viewport) {
+ if let Some(clipped_viewport) = layout.bounds().intersection(viewport) {
for ((child, state), layout) in self
.children
.iter()
@@ -237,7 +246,17 @@ where
.zip(layout.children())
{
child.as_widget().draw(
- state, renderer, theme, style, layout, cursor, &viewport,
+ state,
+ renderer,
+ theme,
+ style,
+ layout,
+ cursor,
+ if self.clip {
+ &clipped_viewport
+ } else {
+ viewport
+ },
);
}
}