Skip to content

Commit

Permalink
Add clip property to Button
Browse files Browse the repository at this point in the history
  • Loading branch information
hecrj committed Feb 15, 2024
1 parent 1150730 commit a73386f
Show file tree
Hide file tree
Showing 3 changed files with 19 additions and 4 deletions.
2 changes: 1 addition & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down
19 changes: 17 additions & 2 deletions widget/src/button.rs
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,7 @@ where
width: Length,
height: Length,
padding: Padding,
clip: bool,
style: Theme::Style,
}

Expand All @@ -82,6 +83,7 @@ where
width: size.width.fluid(),
height: size.height.fluid(),
padding: Padding::new(5.0),
clip: false,
style: Theme::Style::default(),
}
}
Expand Down Expand Up @@ -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>
Expand Down Expand Up @@ -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();
Expand All @@ -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,
Expand All @@ -251,7 +266,7 @@ where
},
content_layout,
cursor,
&bounds,
&viewport,
);
}

Expand Down
2 changes: 1 addition & 1 deletion widget/src/row.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down

0 comments on commit a73386f

Please sign in to comment.