From a73386f68e01943a28f9286f6d5a1bd017e1d7c3 Mon Sep 17 00:00:00 2001 From: Héctor Ramón Jiménez Date: Thu, 15 Feb 2024 01:35:55 +0100 Subject: Add `clip` property to `Button` --- widget/src/button.rs | 19 +++++++++++++++++-- widget/src/row.rs | 2 +- 2 files changed, 18 insertions(+), 3 deletions(-) (limited to 'widget') 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 @@ -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::(), ); + 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, ); } diff --git a/widget/src/row.rs b/widget/src/row.rs index 460b6b0c..735fbbc0 100644 --- a/widget/src/row.rs +++ b/widget/src/row.rs @@ -80,7 +80,7 @@ where self } - /// Sets whether the contents of the [`Column`] should be clipped on + /// Sets whether the contents of the [`Row`] should be clipped on /// overflow. pub fn clip(mut self, clip: bool) -> Self { self.clip = clip; -- cgit