diff options
| author | Laurenz <laurmaedje@gmail.com> | 2021-11-23 14:25:50 +0100 |
|---|---|---|
| committer | Laurenz <laurmaedje@gmail.com> | 2021-11-23 14:25:50 +0100 |
| commit | c77c5a0f0ae6560a03a85e847006c29de9c7ae62 (patch) | |
| tree | 18054ddb95e495cf2e198ca7bac0a5daac7b8240 /src/library | |
| parent | 4f9e5819bbab1f93ad4f4b789038c60487a76368 (diff) | |
Simpler alignment resolving
Diffstat (limited to 'src/library')
| -rw-r--r-- | src/library/align.rs | 4 | ||||
| -rw-r--r-- | src/library/flow.rs | 4 | ||||
| -rw-r--r-- | src/library/par.rs | 2 | ||||
| -rw-r--r-- | src/library/stack.rs | 20 |
4 files changed, 16 insertions, 14 deletions
diff --git a/src/library/align.rs b/src/library/align.rs index 7ce749d1..fa4d17c5 100644 --- a/src/library/align.rs +++ b/src/library/align.rs @@ -45,8 +45,8 @@ impl Layout for AlignNode { let aligns = self.aligns.unwrap_or(Spec::new(Align::Left, Align::Top)); let offset = Point::new( - aligns.x.resolve(Length::zero() .. canvas.w - frame.size.w), - aligns.y.resolve(Length::zero() .. canvas.h - frame.size.h), + aligns.x.resolve(canvas.w - frame.size.w), + aligns.y.resolve(canvas.h - frame.size.h), ); let frame = Rc::make_mut(frame); diff --git a/src/library/flow.rs b/src/library/flow.rs index 5271eca9..93dcbea6 100644 --- a/src/library/flow.rs +++ b/src/library/flow.rs @@ -236,8 +236,8 @@ impl<'a> FlowLayouter<'a> { ruler = ruler.max(aligns.y); // Align horizontally and vertically. - let x = aligns.x.resolve(Length::zero() .. size.w - frame.size.w); - let y = ruler.resolve(before .. before + size.h - self.used.h); + let x = aligns.x.resolve(size.w - frame.size.w); + let y = before + ruler.resolve(size.h - self.used.h); let pos = Point::new(x, y); before += frame.size.h; diff --git a/src/library/par.rs b/src/library/par.rs index 5edffeaa..46dc304a 100644 --- a/src/library/par.rs +++ b/src/library/par.rs @@ -499,7 +499,7 @@ impl<'a> LineLayout<'a> { } } - let x = self.par.align.resolve(offset .. remaining + offset); + let x = offset + self.par.align.resolve(remaining); let y = self.baseline - frame.baseline; offset += frame.size.w; diff --git a/src/library/stack.rs b/src/library/stack.rs index 3d91bec7..a2e80ba5 100644 --- a/src/library/stack.rs +++ b/src/library/stack.rs @@ -230,19 +230,21 @@ impl<'a> StackLayouter<'a> { before += v.resolve(self.fr, remaining); } StackItem::Frame(frame, align) => { - ruler = ruler.max(align); + if self.stack.dir.is_positive() { + ruler = ruler.max(align); + } else { + ruler = ruler.min(align); + } // Align along the block axis. let parent = size.get(self.axis); let child = frame.size.get(self.axis); - let block = ruler.resolve(if self.stack.dir.is_positive() { - let after = self.used.block - before; - before .. parent - after - } else { - let before_with_self = before + child; - let after = self.used.block - before_with_self; - after .. parent - before_with_self - }); + let block = ruler.resolve(parent - self.used.block) + + if self.stack.dir.is_positive() { + before + } else { + self.used.block - child - before + }; let pos = Gen::new(Length::zero(), block).to_point(self.axis); before += child; |
