From 6b6cdae7ce95681d6a1194be70b375494166a8c6 Mon Sep 17 00:00:00 2001 From: Martin Haug Date: Sun, 27 Jun 2021 12:28:40 +0200 Subject: Testing for incremental Also, constraint bugfixes. --- src/layout/stack.rs | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) (limited to 'src/layout/stack.rs') diff --git a/src/layout/stack.rs b/src/layout/stack.rs index 2a0b2806..92a1337f 100644 --- a/src/layout/stack.rs +++ b/src/layout/stack.rs @@ -86,8 +86,8 @@ impl<'a> StackLayouter<'a> { Self { stack, main, + constraints: Constraints::new(expand), expand, - constraints: Constraints::new(regions.expand), regions, full, used: Gen::zero(), @@ -145,7 +145,10 @@ impl<'a> StackLayouter<'a> { while !self.regions.current.get(self.main).fits(size.main) && !self.regions.in_full_last() { - self.constraints.max.get_mut(self.main).set_min(size.main); + self.constraints + .max + .get_mut(self.main) + .set_min(size.main + self.used.main); self.finish_region(); } @@ -188,7 +191,9 @@ impl<'a> StackLayouter<'a> { // Make sure the stack's size satisfies the aspect ratio. if let Some(aspect) = self.stack.aspect { - self.constraints.exact = self.regions.current.to_spec().map(Some); + self.constraints.exact = self.full.to_spec().map(Some); + self.constraints.min = Spec::splat(None); + self.constraints.max = Spec::splat(None); let width = size .width .max(aspect.into_inner() * size.height) @@ -244,6 +249,6 @@ impl<'a> StackLayouter<'a> { self.used = Gen::zero(); self.ruler = Align::Start; self.finished.push(output.constrain(self.constraints)); - self.constraints = Constraints::new(self.regions.expand); + self.constraints = Constraints::new(expand); } } -- cgit v1.2.3 From 9bd8b7ddac046f581dc750e148147901d08cb0f4 Mon Sep 17 00:00:00 2001 From: Martin Haug Date: Sun, 27 Jun 2021 18:06:39 +0200 Subject: Code review, new stack test --- src/layout/stack.rs | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) (limited to 'src/layout/stack.rs') diff --git a/src/layout/stack.rs b/src/layout/stack.rs index 92a1337f..045a06e1 100644 --- a/src/layout/stack.rs +++ b/src/layout/stack.rs @@ -62,6 +62,8 @@ struct StackLayouter<'a> { ruler: Align, /// The constraints for the current region. constraints: Constraints, + /// Whether the last region can fit all the remaining content. + overflowing: bool, /// Offset, alignment and frame for all children that fit into the current /// region. The exact positions are not known yet. frames: Vec<(Length, Gen, Rc)>, @@ -92,6 +94,7 @@ impl<'a> StackLayouter<'a> { full, used: Gen::zero(), ruler: Align::Start, + overflowing: false, frames: vec![], finished: vec![], } @@ -142,9 +145,12 @@ impl<'a> StackLayouter<'a> { } // Find a fitting region. - while !self.regions.current.get(self.main).fits(size.main) - && !self.regions.in_full_last() - { + while !self.regions.current.get(self.main).fits(size.main) { + if self.regions.in_full_last() { + self.overflowing = true; + break; + } + self.constraints .max .get_mut(self.main) @@ -203,6 +209,12 @@ impl<'a> StackLayouter<'a> { size = Size::new(width, width / aspect.into_inner()); } + if self.overflowing { + self.constraints.min.vertical = None; + self.constraints.max.vertical = None; + self.constraints.exact = self.full.to_spec().map(Some); + } + let mut output = Frame::new(size, size.height); let mut first = true; -- cgit v1.2.3 From e9960b89424ab67e633076ccc9f8c420316b076a Mon Sep 17 00:00:00 2001 From: Martin Haug Date: Sun, 27 Jun 2021 18:57:08 +0200 Subject: Code review: Reverse temperature --- src/layout/stack.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'src/layout/stack.rs') diff --git a/src/layout/stack.rs b/src/layout/stack.rs index 045a06e1..fa5fd584 100644 --- a/src/layout/stack.rs +++ b/src/layout/stack.rs @@ -88,12 +88,12 @@ impl<'a> StackLayouter<'a> { Self { stack, main, - constraints: Constraints::new(expand), expand, regions, full, used: Gen::zero(), ruler: Align::Start, + constraints: Constraints::new(expand), overflowing: false, frames: vec![], finished: vec![], @@ -154,7 +154,7 @@ impl<'a> StackLayouter<'a> { self.constraints .max .get_mut(self.main) - .set_min(size.main + self.used.main); + .set_min(self.used.main + size.main); self.finish_region(); } -- cgit v1.2.3