summaryrefslogtreecommitdiff
path: root/src/layout/stack.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/stack.rs
parent1b53e27f270e3c040ee095573af9a5243980191a (diff)
Unbounded pages 🌌
Diffstat (limited to 'src/layout/stack.rs')
-rw-r--r--src/layout/stack.rs21
1 files changed, 8 insertions, 13 deletions
diff --git a/src/layout/stack.rs b/src/layout/stack.rs
index eac631d9..bfb93a94 100644
--- a/src/layout/stack.rs
+++ b/src/layout/stack.rs
@@ -11,7 +11,7 @@ pub struct NodeStack {
/// How to align this stack in _its_ parent.
pub align: ChildAlign,
/// Whether to expand the axes to fill the area or to fit the content.
- pub expansion: Gen<Expansion>,
+ pub expand: Spec<Expansion>,
/// The nodes to be stacked.
pub children: Vec<Node>,
}
@@ -66,7 +66,7 @@ impl<'a> StackLayouter<'a> {
}
fn push_spacing(&mut self, amount: Length) {
- let main_rest = self.areas.current.rem.get_mut(self.main);
+ let main_rest = self.areas.current.get_mut(self.main);
let capped = amount.min(*main_rest);
*main_rest -= capped;
self.used.main += capped;
@@ -77,7 +77,7 @@ impl<'a> StackLayouter<'a> {
self.finish_area();
}
- 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");
@@ -90,7 +90,7 @@ impl<'a> StackLayouter<'a> {
let size = frame.size.switch(self.dirs);
self.frames.push((self.used.main, frame, align));
- *self.areas.current.rem.get_mut(self.main) -= size.main;
+ *self.areas.current.get_mut(self.main) -= size.main;
self.used.main += size.main;
self.used.cross = self.used.cross.max(size.cross);
self.ruler = align.main;
@@ -98,16 +98,11 @@ impl<'a> StackLayouter<'a> {
fn finish_area(&mut self) {
let full_size = {
- let full = self.areas.current.full.switch(self.dirs);
+ let expand = self.stack.expand.switch(self.dirs);
+ let full = self.areas.full.switch(self.dirs);
Gen::new(
- match self.stack.expansion.main {
- Expansion::Fill => full.main,
- Expansion::Fit => self.used.main.min(full.main),
- },
- match self.stack.expansion.cross {
- Expansion::Fill => full.cross,
- Expansion::Fit => self.used.cross.min(full.cross),
- },
+ expand.main.resolve(self.used.main.min(full.main), full.main),
+ expand.cross.resolve(self.used.cross.min(full.cross), full.cross),
)
};