Add clip property to Container, Column, and Row

This commit is contained in:
Héctor Ramón Jiménez 2024-02-15 01:18:00 +01:00
parent 75b19646d3
commit 96775b1e55
No known key found for this signature in database
GPG key ID: 7CC46565708259A7
3 changed files with 57 additions and 6 deletions

View file

@ -37,6 +37,7 @@ pub struct Container<
horizontal_alignment: alignment::Horizontal,
vertical_alignment: alignment::Vertical,
style: Theme::Style,
clip: bool,
content: Element<'a, Message, Theme, Renderer>,
}
@ -63,6 +64,7 @@ where
horizontal_alignment: alignment::Horizontal::Left,
vertical_alignment: alignment::Vertical::Top,
style: Default::default(),
clip: false,
content,
}
}
@ -132,6 +134,13 @@ where
self.style = style.into();
self
}
/// Sets whether the contents of the [`Container`] 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>
@ -255,7 +264,7 @@ where
) {
let style = theme.appearance(&self.style);
if let Some(viewport) = layout.bounds().intersection(viewport) {
if let Some(clipped_viewport) = layout.bounds().intersection(viewport) {
draw_background(renderer, &style, layout.bounds());
self.content.as_widget().draw(
@ -269,7 +278,11 @@ where
},
layout.children().next().unwrap(),
cursor,
&viewport,
if self.clip {
&clipped_viewport
} else {
viewport
},
);
}
}