diff options
| author | Martin Haug <mhaug@live.de> | 2021-12-18 18:04:26 +0100 |
|---|---|---|
| committer | Martin Haug <mhaug@live.de> | 2021-12-26 15:59:24 +0100 |
| commit | b22ce6f8b84e0a75d162feb6f3699e26f86f2453 (patch) | |
| tree | 76c564484d2d020d23ffbb75b133fc8bacae9454 /src/library/page.rs | |
| parent | f6c7a8292dc1ab0560408fca9d74505e9d7cf13a (diff) | |
Introduce equal-width columns
Diffstat (limited to 'src/library/page.rs')
| -rw-r--r-- | src/library/page.rs | 22 |
1 files changed, 20 insertions, 2 deletions
diff --git a/src/library/page.rs b/src/library/page.rs index 0e690770..6585edb9 100644 --- a/src/library/page.rs +++ b/src/library/page.rs @@ -4,7 +4,7 @@ use std::fmt::{self, Display, Formatter}; use std::str::FromStr; use super::prelude::*; -use super::PadNode; +use super::{ColumnsNode, PadNode}; /// `pagebreak`: Start a new page. pub fn pagebreak(_: &mut EvalContext, _: &mut Args) -> TypResult<Value> { @@ -40,6 +40,10 @@ impl PageNode { pub const BOTTOM: Smart<Linear> = Smart::Auto; /// The page's background color. pub const FILL: Option<Paint> = None; + /// How many columns the page has. + pub const COLUMNS: usize = 1; + /// How many columns the page has. + pub const COLUMN_GUTTER: Linear = Relative::new(0.04).into(); } impl Construct for PageNode { @@ -76,6 +80,8 @@ impl Set for PageNode { styles.set_opt(Self::RIGHT, args.named("right")?.or(margins)); styles.set_opt(Self::BOTTOM, args.named("bottom")?.or(margins)); styles.set_opt(Self::FILL, args.named("fill")?); + styles.set_opt(Self::COLUMNS, args.named("columns")?); + styles.set_opt(Self::COLUMN_GUTTER, args.named("column-gutter")?); Ok(()) } @@ -112,8 +118,20 @@ impl PageNode { bottom: ctx.styles.get(Self::BOTTOM).unwrap_or(default.bottom), }; + let columns = ctx.styles.get(Self::COLUMNS); + let child = if ctx.styles.get(Self::COLUMNS) > 1 { + ColumnsNode { + child: self.child.clone(), + columns, + gutter: ctx.styles.get(Self::COLUMN_GUTTER), + } + .pack() + } else { + self.child.clone() + }; + // Pad the child. - let padded = PadNode { child: self.child.clone(), padding }.pack(); + let padded = PadNode { child, padding }.pack(); // Layout the child. let expand = size.map(Length::is_finite); |
