summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLaurenz <laurmaedje@gmail.com>2021-10-02 18:59:53 +0200
committerLaurenz <laurmaedje@gmail.com>2021-10-02 19:35:02 +0200
commitc25c6a35b274f227e46c774f53f1cb424d1f3b91 (patch)
treef158c29344b4c09c59eb35e6c0885a88a3f9f079
parent1d60525690ebc40745ffa1f51080539fc9448aff (diff)
Simpler and more versatile row and column gutter arguments
-rw-r--r--src/library/layout.rs27
-rw-r--r--tests/typ/layout/grid-1.typ4
-rw-r--r--tests/typ/layout/grid-2.typ4
-rw-r--r--tests/typ/layout/grid-3.typ16
4 files changed, 26 insertions, 25 deletions
diff --git a/src/library/layout.rs b/src/library/layout.rs
index 87cedd99..b6204901 100644
--- a/src/library/layout.rs
+++ b/src/library/layout.rs
@@ -251,7 +251,12 @@ pub fn stack(_: &mut EvalContext, args: &mut Args) -> TypResult<Value> {
/// `grid`: Arrange children into a grid.
pub fn grid(_: &mut EvalContext, args: &mut Args) -> TypResult<Value> {
castable! {
- Vec<TrackSizing>: "array of autos, linears, and fractionals",
+ Vec<TrackSizing>: "integer or (auto, linear, fractional, or array thereof)",
+ Value::Auto => vec![TrackSizing::Auto],
+ Value::Length(v) => vec![TrackSizing::Linear(v.into())],
+ Value::Relative(v) => vec![TrackSizing::Linear(v.into())],
+ Value::Linear(v) => vec![TrackSizing::Linear(v)],
+ Value::Fractional(v) => vec![TrackSizing::Fractional(v)],
Value::Int(count) => vec![TrackSizing::Auto; count.max(0) as usize],
Value::Array(values) => values
.into_iter()
@@ -272,21 +277,17 @@ pub fn grid(_: &mut EvalContext, args: &mut Args) -> TypResult<Value> {
let rows = args.named("rows")?.unwrap_or_default();
let tracks = Gen::new(columns, rows);
- let column_dir = args.named("column-dir")?;
- let row_dir = args.named("row-dir")?;
-
- let gutter_columns = args.named("gutter-columns")?;
- let gutter_rows = args.named("gutter-rows")?;
- let gutter_default = args
- .named("gutter")?
- .map(|v| vec![TrackSizing::Linear(v)])
- .unwrap_or_default();
-
+ let base_gutter: Vec<TrackSizing> = args.named("gutter")?.unwrap_or_default();
+ let column_gutter = args.named("column-gutter")?;
+ let row_gutter = args.named("row-gutter")?;
let gutter = Gen::new(
- gutter_columns.unwrap_or_else(|| gutter_default.clone()),
- gutter_rows.unwrap_or(gutter_default),
+ column_gutter.unwrap_or_else(|| base_gutter.clone()),
+ row_gutter.unwrap_or(base_gutter),
);
+ let column_dir = args.named("column-dir")?;
+ let row_dir = args.named("row-dir")?;
+
let children: Vec<Template> = args.all().collect();
Ok(Value::Template(Template::from_block(move |state| {
diff --git a/tests/typ/layout/grid-1.typ b/tests/typ/layout/grid-1.typ
index 92a1b990..3d0412c2 100644
--- a/tests/typ/layout/grid-1.typ
+++ b/tests/typ/layout/grid-1.typ
@@ -25,8 +25,8 @@
---
#grid(
columns: (auto, auto, 40%),
- gutter-columns: (1fr,),
- gutter-rows: (1fr,),
+ column-gutter: 1fr,
+ row-gutter: 1fr,
rect(fill: eastern)[dddaa aaa aaa],
rect(fill: conifer)[ccc],
rect(width: 100%, fill: rgb("dddddd"))[aaa],
diff --git a/tests/typ/layout/grid-2.typ b/tests/typ/layout/grid-2.typ
index 164801ae..c522a402 100644
--- a/tests/typ/layout/grid-2.typ
+++ b/tests/typ/layout/grid-2.typ
@@ -4,8 +4,8 @@
#page(width: 12cm, height: 2.5cm)
#grid(
columns: 5,
- gutter-columns: (2fr, 1fr, 1fr),
- gutter-rows: 4 * (6pt,),
+ column-gutter: (2fr, 1fr, 1fr),
+ row-gutter: 6pt,
[*Quarter*],
[Expenditure],
[External Revenue],
diff --git a/tests/typ/layout/grid-3.typ b/tests/typ/layout/grid-3.typ
index 23c5a43c..42d2ce97 100644
--- a/tests/typ/layout/grid-3.typ
+++ b/tests/typ/layout/grid-3.typ
@@ -4,7 +4,7 @@
#page(width: 5cm, height: 3cm)
#grid(
columns: 2,
- gutter-rows: 3 * (8pt,),
+ row-gutter: 8pt,
[Lorem ipsum dolor sit amet.
Aenean commodo ligula eget dolor. Aenean massa. Penatibus et magnis.],
@@ -21,8 +21,8 @@
#page(width: 5cm, height: 2cm)
#grid(
columns: 4 * (1fr,),
- gutter-rows: (10pt,),
- gutter-columns: (0pt, 10%),
+ row-gutter: 10pt,
+ column-gutter: (0pt, 10%),
image("../../res/rhino.png"),
align(right, rect(width: 100%, fill: eastern)[LoL]),
[rofl],
@@ -35,8 +35,8 @@
#page(width: 5cm, height: 2cm)
#grid(
columns: 3 * (1fr,),
- gutter-rows: (8pt,),
- gutter-columns: (0pt, 10%),
+ row-gutter: 8pt,
+ column-gutter: (0pt, 10%),
[A], [B], [C],
[Ha!\ ] * 6,
[rofl],
@@ -51,8 +51,8 @@
#page(width: 5cm, height: 2.25cm)
#grid(
columns: 4 * (1fr,),
- gutter-rows: (10pt,),
- gutter-columns: (0pt, 10%),
+ row-gutter: 10pt,
+ column-gutter: (0pt, 10%),
[A], [B], [C], [D],
grid(columns: 2, [A], [B], [C\ ]*3, [D]),
align(right, rect(width: 100%, fill: eastern)[LoL]),
@@ -66,7 +66,7 @@
#grid(
columns: 2 * (1fr,),
rows: (1fr, 2fr, auto, 1fr, 1cm),
- gutter-rows: 4 * (10pt,),
+ row-gutter: 10pt,
rect(height: 100%, width: 100%, fill: rgb("ff0000"))[No height],
[foo],
rect(height: 100%, width: 100%, fill: rgb("fc0030"))[Still no height],