diff options
| author | 2024-01-09 06:44:15 +0100 | |
|---|---|---|
| committer | 2024-01-10 10:01:49 +0100 | |
| commit | e710e7694907fe320e0a849e880c51952e6e748f (patch) | |
| tree | 017bbaff5c50e0ba49a76bc864b6486bd7089c88 /widget/src/keyed | |
| parent | d62bb8193c1c43f565fcc5c52293d564c91e215d (diff) | |
| download | iced-e710e7694907fe320e0a849e880c51952e6e748f.tar.gz iced-e710e7694907fe320e0a849e880c51952e6e748f.tar.bz2 iced-e710e7694907fe320e0a849e880c51952e6e748f.zip | |
Fix `size_hint` for `keyed_column`
Diffstat (limited to '')
| -rw-r--r-- | widget/src/keyed/column.rs | 45 | 
1 files changed, 25 insertions, 20 deletions
| diff --git a/widget/src/keyed/column.rs b/widget/src/keyed/column.rs index 32320300..7f05a81e 100644 --- a/widget/src/keyed/column.rs +++ b/widget/src/keyed/column.rs @@ -30,26 +30,10 @@ where  impl<'a, Key, Message, Renderer> Column<'a, Key, Message, Renderer>  where      Key: Copy + PartialEq, +    Renderer: crate::core::Renderer,  {      /// Creates an empty [`Column`].      pub fn new() -> Self { -        Self::with_children(Vec::new()) -    } - -    /// Creates a [`Column`] with the given elements. -    pub fn with_children( -        children: impl IntoIterator<Item = (Key, Element<'a, Message, Renderer>)>, -    ) -> Self { -        let (keys, children) = children.into_iter().fold( -            (Vec::new(), Vec::new()), -            |(mut keys, mut children), (key, child)| { -                keys.push(key); -                children.push(child); - -                (keys, children) -            }, -        ); -          Column {              spacing: 0.0,              padding: Padding::ZERO, @@ -57,11 +41,20 @@ where              height: Length::Shrink,              max_width: f32::INFINITY,              align_items: Alignment::Start, -            keys, -            children, +            keys: Vec::new(), +            children: Vec::new(),          }      } +    /// Creates a [`Column`] with the given elements. +    pub fn with_children( +        children: impl IntoIterator<Item = (Key, Element<'a, Message, Renderer>)>, +    ) -> Self { +        children +            .into_iter() +            .fold(Self::new(), |column, (key, child)| column.push(key, child)) +    } +      /// Sets the vertical spacing _between_ elements.      ///      /// Custom margins per element do not exist in iced. You should use this @@ -108,8 +101,19 @@ where          key: Key,          child: impl Into<Element<'a, Message, Renderer>>,      ) -> Self { +        let child = child.into(); +        let size = child.as_widget().size_hint(); + +        if size.width.is_fill() { +            self.width = Length::Fill; +        } + +        if size.height.is_fill() { +            self.height = Length::Fill; +        } +          self.keys.push(key); -        self.children.push(child.into()); +        self.children.push(child);          self      }  } @@ -117,6 +121,7 @@ where  impl<'a, Key, Message, Renderer> Default for Column<'a, Key, Message, Renderer>  where      Key: Copy + PartialEq, +    Renderer: crate::core::Renderer,  {      fn default() -> Self {          Self::new() | 
