From e60dabddefd6608a34ecb3f21a0fd53fef6d1f07 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?H=C3=A9ctor=20Ram=C3=B3n=20Jim=C3=A9nez?= Date: Mon, 19 Feb 2024 08:49:28 +0100 Subject: [PATCH] Add `from_vec` method to `Column` and `Row` --- widget/src/column.rs | 33 +++++++++++++++++++++++---------- widget/src/row.rs | 31 ++++++++++++++++++++++--------- 2 files changed, 45 insertions(+), 19 deletions(-) diff --git a/widget/src/column.rs b/widget/src/column.rs index 0c5ea75e..e59a0809 100644 --- a/widget/src/column.rs +++ b/widget/src/column.rs @@ -30,16 +30,7 @@ where { /// Creates an empty [`Column`]. pub fn new() -> Self { - Column { - spacing: 0.0, - padding: Padding::ZERO, - width: Length::Shrink, - height: Length::Shrink, - max_width: f32::INFINITY, - align_items: Alignment::Start, - clip: false, - children: Vec::new(), - } + Self::from_vec(Vec::new()) } /// Creates a [`Column`] with the given elements. @@ -49,6 +40,28 @@ where Self::new().extend(children) } + /// Creates a [`Column`] from an already allocated [`Vec`]. + /// + /// Keep in mind that the [`Column`] will not inspect the [`Vec`], which means + /// it won't automatically adapt to the sizing strategy of its contents. + /// + /// If any of the children have a [`Length::Fill`] strategy, you will need to + /// call [`Column::width`] or [`Column::height`] accordingly. + pub fn from_vec( + children: Vec>, + ) -> Self { + Self { + spacing: 0.0, + padding: Padding::ZERO, + width: Length::Shrink, + height: Length::Shrink, + max_width: f32::INFINITY, + align_items: Alignment::Start, + clip: false, + children, + } + } + /// Sets the vertical spacing _between_ elements. /// /// Custom margins per element do not exist in iced. You should use this diff --git a/widget/src/row.rs b/widget/src/row.rs index 4ad806ed..b41b5380 100644 --- a/widget/src/row.rs +++ b/widget/src/row.rs @@ -28,15 +28,7 @@ where { /// Creates an empty [`Row`]. pub fn new() -> Self { - Row { - spacing: 0.0, - padding: Padding::ZERO, - width: Length::Shrink, - height: Length::Shrink, - align_items: Alignment::Start, - clip: false, - children: Vec::new(), - } + Self::from_vec(Vec::new()) } /// Creates a [`Row`] with the given elements. @@ -46,6 +38,27 @@ where Self::new().extend(children) } + /// Creates a [`Row`] from an already allocated [`Vec`]. + /// + /// Keep in mind that the [`Row`] will not inspect the [`Vec`], which means + /// it won't automatically adapt to the sizing strategy of its contents. + /// + /// If any of the children have a [`Length::Fill`] strategy, you will need to + /// call [`Row::width`] or [`Row::height`] accordingly. + pub fn from_vec( + children: Vec>, + ) -> Self { + Self { + spacing: 0.0, + padding: Padding::ZERO, + width: Length::Shrink, + height: Length::Shrink, + align_items: Alignment::Start, + clip: false, + children, + } + } + /// Sets the horizontal spacing _between_ elements. /// /// Custom margins per element do not exist in iced. You should use this