diff options
Diffstat (limited to 'widget/src/row.rs')
-rw-r--r-- | widget/src/row.rs | 23 |
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 + }, ); } } |