summaryrefslogtreecommitdiff
path: root/src/layout/par.rs
diff options
context:
space:
mode:
authorLaurenz <laurmaedje@gmail.com>2021-01-13 23:19:44 +0100
committerLaurenz <laurmaedje@gmail.com>2021-01-13 23:19:44 +0100
commit272a4c228976466e9fa6cc100ad89f93dc5cc371 (patch)
treead02a6e57b07da061432d58ff0ca46d6777bdb97 /src/layout/par.rs
parent1b53e27f270e3c040ee095573af9a5243980191a (diff)
Unbounded pages 🌌
Diffstat (limited to 'src/layout/par.rs')
-rw-r--r--src/layout/par.rs21
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);