diff options
| author | Laurenz <laurmaedje@gmail.com> | 2021-01-13 23:19:44 +0100 |
|---|---|---|
| committer | Laurenz <laurmaedje@gmail.com> | 2021-01-13 23:19:44 +0100 |
| commit | 272a4c228976466e9fa6cc100ad89f93dc5cc371 (patch) | |
| tree | ad02a6e57b07da061432d58ff0ca46d6777bdb97 /src/layout/par.rs | |
| parent | 1b53e27f270e3c040ee095573af9a5243980191a (diff) | |
Unbounded pages 🌌
Diffstat (limited to 'src/layout/par.rs')
| -rw-r--r-- | src/layout/par.rs | 21 |
1 files changed, 13 insertions, 8 deletions
diff --git a/src/layout/par.rs b/src/layout/par.rs index 7b2e4e92..2a1ad941 100644 --- a/src/layout/par.rs +++ b/src/layout/par.rs @@ -74,7 +74,7 @@ impl<'a> ParLayouter<'a> { } fn push_spacing(&mut self, amount: Length) { - let cross_max = self.areas.current.rem.get(self.cross); + let cross_max = self.areas.current.get(self.cross); self.run_size.cross = (self.run_size.cross + amount).min(cross_max); } @@ -84,7 +84,7 @@ impl<'a> ParLayouter<'a> { } let fits = { - let mut usable = self.areas.current.rem; + let mut usable = self.areas.current; *usable.get_mut(self.cross) -= self.run_size.cross; usable.fits(frame.size) }; @@ -92,7 +92,7 @@ impl<'a> ParLayouter<'a> { if !fits { self.finish_run(); - while !self.areas.current.rem.fits(frame.size) { + while !self.areas.current.fits(frame.size) { if self.areas.in_full_last() { // TODO: Diagnose once the necessary spans exist. let _ = warning!("cannot fit frame into any area"); @@ -112,10 +112,15 @@ impl<'a> ParLayouter<'a> { } fn finish_run(&mut self) { - let full_size = Gen::new(self.run_size.main, match self.par.cross_expansion { - Expansion::Fill => self.areas.current.full.get(self.cross), - Expansion::Fit => self.run_size.cross, - }); + let full_size = { + let full = self.areas.full.switch(self.dirs); + Gen::new( + self.run_size.main, + self.par + .cross_expansion + .resolve(self.run_size.cross.min(full.cross), full.cross), + ) + }; let mut output = Frame::new(full_size.switch(self.dirs).to_size()); @@ -139,7 +144,7 @@ impl<'a> ParLayouter<'a> { self.lines.push((self.lines_size.main, output, self.run_ruler)); let main_offset = full_size.main + self.par.line_spacing; - *self.areas.current.rem.get_mut(self.main) -= main_offset; + *self.areas.current.get_mut(self.main) -= main_offset; self.lines_size.main += main_offset; self.lines_size.cross = self.lines_size.cross.max(full_size.cross); |
