diff options
| author | Laurenz <laurmaedje@gmail.com> | 2023-03-09 14:17:24 +0100 |
|---|---|---|
| committer | Laurenz <laurmaedje@gmail.com> | 2023-03-09 14:42:14 +0100 |
| commit | c38d72383d2068361d635d6c1c78ba97aa917801 (patch) | |
| tree | e758418a2d704d69dee88faf4a9a9c69b25b47ca /library/src/layout/stack.rs | |
| parent | d7a65fa26d131179d9d82226e5ee1b562084e48a (diff) | |
Make all optional fields settable
Diffstat (limited to 'library/src/layout/stack.rs')
| -rw-r--r-- | library/src/layout/stack.rs | 28 |
1 files changed, 14 insertions, 14 deletions
diff --git a/library/src/layout/stack.rs b/library/src/layout/stack.rs index f4e4ab2c..c21fa884 100644 --- a/library/src/layout/stack.rs +++ b/library/src/layout/stack.rs @@ -22,24 +22,21 @@ use crate::prelude::*; /// Category: layout #[node(Layout)] pub struct StackNode { - /// The childfren to stack along the axis. - #[variadic] - pub children: Vec<StackChild>, - /// The direction along which the items are stacked. Possible values are: /// /// - `{ltr}`: Left to right. /// - `{rtl}`: Right to left. /// - `{ttb}`: Top to bottom. /// - `{btt}`: Bottom to top. - #[named] #[default(Dir::TTB)] pub dir: Dir, /// Spacing to insert between items where no explicit spacing was provided. - #[named] - #[default] pub spacing: Option<Spacing>, + + /// The childfren to stack along the axis. + #[variadic] + pub children: Vec<StackChild>, } impl Layout for StackNode { @@ -49,10 +46,10 @@ impl Layout for StackNode { styles: StyleChain, regions: Regions, ) -> SourceResult<Fragment> { - let mut layouter = StackLayouter::new(self.dir(), regions, styles); + let mut layouter = StackLayouter::new(self.dir(styles), regions, styles); // Spacing to insert before the next block. - let spacing = self.spacing(); + let spacing = self.spacing(styles); let mut deferred = None; for child in self.children() { @@ -201,12 +198,15 @@ impl<'a> StackLayouter<'a> { // Block-axis alignment of the `AlignNode` is respected // by the stack node. - let aligns = match block.to::<StyledNode>() { - Some(styled) => AlignNode::alignment_in(styles.chain(&styled.map())), - None => AlignNode::alignment_in(styles), - }; + let aligns = if let Some(align) = block.to::<AlignNode>() { + align.alignment(styles) + } else if let Some(styled) = block.to::<StyledNode>() { + AlignNode::alignment_in(styles.chain(&styled.map())) + } else { + AlignNode::alignment_in(styles) + } + .resolve(styles); - let aligns = aligns.resolve(styles); let fragment = block.layout(vt, styles, self.regions)?; let len = fragment.len(); for (i, frame) in fragment.into_iter().enumerate() { |
