From 96775b1e55917df538c729eef90b4680759f2559 Mon Sep 17 00:00:00 2001 From: Héctor Ramón Jiménez Date: Thu, 15 Feb 2024 01:18:00 +0100 Subject: Add `clip` property to `Container`, `Column`, and `Row` --- widget/src/column.rs | 23 +++++++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) (limited to 'widget/src/column.rs') diff --git a/widget/src/column.rs b/widget/src/column.rs index 1e9841ee..8154ad85 100644 --- a/widget/src/column.rs +++ b/widget/src/column.rs @@ -20,6 +20,7 @@ pub struct Column<'a, Message, Theme = crate::Theme, Renderer = crate::Renderer> height: Length, max_width: f32, align_items: Alignment, + clip: bool, children: Vec>, } @@ -36,6 +37,7 @@ where height: Length::Shrink, max_width: f32::INFINITY, align_items: Alignment::Start, + clip: false, children: Vec::new(), } } @@ -87,6 +89,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 [`Column`]. pub fn push( mut self, @@ -240,7 +249,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() @@ -248,7 +257,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 + }, ); } } -- cgit