summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--CHANGELOG.md2
-rw-r--r--widget/src/button.rs19
-rw-r--r--widget/src/row.rs2
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;