summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLibravatar Héctor Ramón <hector@hecrj.dev>2024-02-21 08:43:27 +0100
committerLibravatar GitHub <noreply@github.com>2024-02-21 08:43:27 +0100
commit56ac21cacbead255c6ae574ed2b7ba2895018c56 (patch)
tree89d146cb74335c4f479d5f2cd013930af47f9c37
parent5ba818a13aa99aa6bf00e360f68140b6df2d270f (diff)
parent28f0eccd8164985ea6a72b976b7b09ae81fb76ac (diff)
downloadiced-56ac21cacbead255c6ae574ed2b7ba2895018c56.tar.gz
iced-56ac21cacbead255c6ae574ed2b7ba2895018c56.tar.bz2
iced-56ac21cacbead255c6ae574ed2b7ba2895018c56.zip
Merge pull request #2275 from iced-rs/component-size-hint
`size_hint` method for `Component` trait
Diffstat (limited to '')
-rw-r--r--CHANGELOG.md1
-rw-r--r--examples/component/src/main.rs9
-rw-r--r--widget/src/lazy/component.rs21
3 files changed, 26 insertions, 5 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 0ff082fd..e8a03638 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -11,6 +11,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- `clipboard` module in `advanced` module. [#2272](https://github.com/iced-rs/iced/pull/2272)
- Default `disabled` style for `checkbox` and `hovered` style for `Svg`. [#2273](https://github.com/iced-rs/iced/pull/2273)
- `From<u16>` and `From<i32>` implementations for `border::Radius`. [#2274](https://github.com/iced-rs/iced/pull/2274)
+- `size_hint` method for `Component` trait. [#2275](https://github.com/iced-rs/iced/pull/2275)
### Fixed
- Black images when using OpenGL backend in `iced_wgpu`. [#2259](https://github.com/iced-rs/iced/pull/2259)
diff --git a/examples/component/src/main.rs b/examples/component/src/main.rs
index 81be4d7f..4670824d 100644
--- a/examples/component/src/main.rs
+++ b/examples/component/src/main.rs
@@ -48,7 +48,7 @@ impl Sandbox for Component {
mod numeric_input {
use iced::alignment::{self, Alignment};
use iced::widget::{button, component, row, text, text_input, Component};
- use iced::{Element, Length};
+ use iced::{Element, Length, Size};
pub struct NumericInput<Message> {
value: Option<u32>,
@@ -143,6 +143,13 @@ mod numeric_input {
.spacing(10)
.into()
}
+
+ fn size_hint(&self) -> Size<Length> {
+ Size {
+ width: Length::Fill,
+ height: Length::Shrink,
+ }
+ }
}
impl<'a, Message> From<NumericInput<Message>> for Element<'a, Message>
diff --git a/widget/src/lazy/component.rs b/widget/src/lazy/component.rs
index edecbdaa..a512e0de 100644
--- a/widget/src/lazy/component.rs
+++ b/widget/src/lazy/component.rs
@@ -62,6 +62,17 @@ pub trait Component<Message, Theme = crate::Theme, Renderer = crate::Renderer> {
_operation: &mut dyn widget::Operation<Message>,
) {
}
+
+ /// Returns a [`Size`] hint for laying out the [`Component`].
+ ///
+ /// This hint may be used by some widget containers to adjust their sizing strategy
+ /// during construction.
+ fn size_hint(&self) -> Size<Length> {
+ Size {
+ width: Length::Shrink,
+ height: Length::Shrink,
+ }
+ }
}
struct Tag<T>(T);
@@ -255,10 +266,12 @@ where
}
fn size_hint(&self) -> Size<Length> {
- Size {
- width: Length::Shrink,
- height: Length::Shrink,
- }
+ self.state
+ .borrow()
+ .as_ref()
+ .expect("Borrow instance state")
+ .borrow_component()
+ .size_hint()
}
fn layout(