diff options
-rw-r--r-- | CHANGELOG.md | 2 | ||||
-rw-r--r-- | widget/src/button.rs | 19 | ||||
-rw-r--r-- | widget/src/row.rs | 2 |
3 files changed, 19 insertions, 4 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md index fb59f423..2b5dc776 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -47,7 +47,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Support for generic `Element` in `Tooltip`. [#2228](https://github.com/iced-rs/iced/pull/2228) - Container and `gap` styling for `Scrollable`. [#2239](https://github.com/iced-rs/iced/pull/2239) - Use `Borrow` for both `options` and `selected` in PickList. [#2251](https://github.com/iced-rs/iced/pull/2251) -- `clip` property for `Container`, `Column`, and `Row`. #[2252](https://github.com/iced-rs/iced/pull/2252) +- `clip` property for `Container`, `Column`, `Row`, and `Button`. #[2252](https://github.com/iced-rs/iced/pull/2252) ### Changed - Enable WebGPU backend in `wgpu` by default instead of WebGL. [#2068](https://github.com/iced-rs/iced/pull/2068) 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<Message, Theme, Renderer> @@ -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::<State>(), ); + 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; |