diff options
| author | Laurenz <laurmaedje@gmail.com> | 2019-11-21 17:23:44 +0100 |
|---|---|---|
| committer | Laurenz <laurmaedje@gmail.com> | 2019-11-21 17:50:51 +0100 |
| commit | ebff8eb038706404cb4601cf6853675319663e3f (patch) | |
| tree | 2837b41d6a0b23920eed5713887a1639552aed3a /src/layout/flex.rs | |
| parent | 131e81baaf668f76a7dd1d39a0d88afd5e4582ec (diff) | |
Fix spacing bugs 🚧
Diffstat (limited to 'src/layout/flex.rs')
| -rw-r--r-- | src/layout/flex.rs | 23 |
1 files changed, 11 insertions, 12 deletions
diff --git a/src/layout/flex.rs b/src/layout/flex.rs index 1d9f044d..c3d88e1b 100644 --- a/src/layout/flex.rs +++ b/src/layout/flex.rs @@ -41,8 +41,7 @@ struct PartialLine { usable: Size, content: Vec<(Size, Layout)>, dimensions: Size2D, - space: Option<Size>, - last_was_space: bool, + space: SpaceState, } impl PartialLine { @@ -51,8 +50,7 @@ impl PartialLine { usable, content: vec![], dimensions: Size2D::zero(), - space: None, - last_was_space: false, + space: SpaceState::Forbidden, } } } @@ -198,7 +196,7 @@ impl FlexLayouter { let remaining = self.axes.specialize(Size2D { x: self.part.usable - self.part.dimensions.x - - self.part.space.unwrap_or(Size::zero()), + - self.part.space.soft_or_zero(), y: self.line.combined_dimensions.y, }); @@ -235,9 +233,9 @@ impl FlexLayouter { fn layout_box(&mut self, boxed: Layout) -> LayoutResult<()> { let size = self.axes.generalize(boxed.dimensions); - let new_dimension = self.part.dimensions.x - + self.part.space.unwrap_or(Size::zero()); + + size.x + + self.part.space.soft_or_zero(); if new_dimension > self.part.usable { self.finish_line()?; @@ -251,7 +249,7 @@ impl FlexLayouter { } } - if let Some(space) = self.part.space.take() { + if let SpaceState::Soft(space) = self.part.space { self.layout_space(space, false); } @@ -260,15 +258,15 @@ impl FlexLayouter { self.part.dimensions.x += size.x; self.part.dimensions.y.max_eq(size.y); - self.part.last_was_space = false; + self.part.space = SpaceState::Allowed; Ok(()) } fn layout_space(&mut self, space: Size, soft: bool) { if soft { - if !self.part.last_was_space { - self.part.space = Some(space); + if self.part.space != SpaceState::Forbidden { + self.part.space = SpaceState::Soft(space); } } else { if self.part.dimensions.x + space > self.part.usable { @@ -276,7 +274,8 @@ impl FlexLayouter { } else { self.part.dimensions.x += space; } - self.part.last_was_space = true; + + self.part.space = SpaceState::Forbidden; } } |
