diff options
author | 2024-02-21 08:24:08 +0100 | |
---|---|---|
committer | 2024-02-21 08:24:08 +0100 | |
commit | cd2130a69a6f0089f8fda378e19ade0de330ed56 (patch) | |
tree | b7b11f45857161087217668a91b2c47b15fe0309 | |
parent | 5ba818a13aa99aa6bf00e360f68140b6df2d270f (diff) | |
download | iced-cd2130a69a6f0089f8fda378e19ade0de330ed56.tar.gz iced-cd2130a69a6f0089f8fda378e19ade0de330ed56.tar.bz2 iced-cd2130a69a6f0089f8fda378e19ade0de330ed56.zip |
Add `size_hint` method to `Component` trait
This can be used to aid the sizing strategy of
some containers directly in the component definition,
instead of stating the sizes explicitly in `view`
logic.
-rw-r--r-- | examples/component/src/main.rs | 9 | ||||
-rw-r--r-- | widget/src/lazy/component.rs | 21 |
2 files changed, 25 insertions, 5 deletions
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( |