Merge pull request #2852 from mtkennerly/feature/wrapped-row-vertical-spacing

Allow custom vertical spacing for wrapped rows
This commit is contained in:
Héctor 2025-03-20 23:46:41 +01:00 committed by GitHub
commit 4b075b9731
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -167,7 +167,10 @@ where
/// ///
/// The original alignment of the [`Row`] is preserved per row wrapped. /// The original alignment of the [`Row`] is preserved per row wrapped.
pub fn wrap(self) -> Wrapping<'a, Message, Theme, Renderer> { pub fn wrap(self) -> Wrapping<'a, Message, Theme, Renderer> {
Wrapping { row: self } Wrapping {
row: self,
vertical_spacing: None,
}
} }
} }
@ -372,6 +375,15 @@ pub struct Wrapping<
Renderer = crate::Renderer, Renderer = crate::Renderer,
> { > {
row: Row<'a, Message, Theme, Renderer>, row: Row<'a, Message, Theme, Renderer>,
vertical_spacing: Option<f32>,
}
impl<Message, Theme, Renderer> Wrapping<'_, Message, Theme, Renderer> {
/// Sets the vertical spacing _between_ lines.
pub fn vertical_spacing(mut self, amount: impl Into<Pixels>) -> Self {
self.vertical_spacing = Some(amount.into().0);
self
}
} }
impl<Message, Theme, Renderer> Widget<Message, Theme, Renderer> impl<Message, Theme, Renderer> Widget<Message, Theme, Renderer>
@ -403,6 +415,7 @@ where
.shrink(self.row.padding); .shrink(self.row.padding);
let spacing = self.row.spacing; let spacing = self.row.spacing;
let vertical_spacing = self.vertical_spacing.unwrap_or(spacing);
let max_width = limits.max().width; let max_width = limits.max().width;
let mut children: Vec<layout::Node> = Vec::new(); let mut children: Vec<layout::Node> = Vec::new();
@ -447,7 +460,7 @@ where
align(row_start..i, row_height, &mut children); align(row_start..i, row_height, &mut children);
y += row_height + spacing; y += row_height + vertical_spacing;
x = 0.0; x = 0.0;
row_start = i; row_start = i;
row_height = 0.0; row_height = 0.0;