diff options
| author | Laurenz <laurmaedje@gmail.com> | 2021-12-28 13:37:02 +0100 |
|---|---|---|
| committer | Laurenz <laurmaedje@gmail.com> | 2021-12-28 13:41:26 +0100 |
| commit | bd304b99e5d2d23027d90eaae871fdd3bdd12f5d (patch) | |
| tree | a6814a4ba90764dcb1de3d55fa6e95d7a71dc14a /src/library/grid.rs | |
| parent | 9624ad635bd8adb0e421c37c63c7310ecc71a708 (diff) | |
Tidying
Diffstat (limited to 'src/library/grid.rs')
| -rw-r--r-- | src/library/grid.rs | 88 |
1 files changed, 43 insertions, 45 deletions
diff --git a/src/library/grid.rs b/src/library/grid.rs index d341cf5b..3292cfe0 100644 --- a/src/library/grid.rs +++ b/src/library/grid.rs @@ -1,47 +1,20 @@ +//! Layout along a row and column raster. + use super::prelude::*; /// `grid`: Arrange children into a grid. pub fn grid(_: &mut EvalContext, args: &mut Args) -> TypResult<Value> { - castable! { - Vec<TrackSizing>, - Expected: "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(v) => vec![TrackSizing::Auto; Value::Int(v).cast()?], - Value::Array(values) => values - .into_iter() - .filter_map(|v| v.cast().ok()) - .collect(), - } - - castable! { - TrackSizing, - Expected: "auto, linear, or fractional", - Value::Auto => Self::Auto, - Value::Length(v) => Self::Linear(v.into()), - Value::Relative(v) => Self::Linear(v.into()), - Value::Linear(v) => Self::Linear(v), - Value::Fractional(v) => Self::Fractional(v), - } - let columns = args.named("columns")?.unwrap_or_default(); let rows = args.named("rows")?.unwrap_or_default(); - let tracks = Spec::new(columns, rows); - 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 = Spec::new( - column_gutter.unwrap_or_else(|| base_gutter.clone()), - row_gutter.unwrap_or(base_gutter), - ); - Ok(Value::block(GridNode { - tracks, - gutter, + tracks: Spec::new(columns, rows), + gutter: Spec::new( + column_gutter.unwrap_or_else(|| base_gutter.clone()), + row_gutter.unwrap_or(base_gutter), + ), children: args.all().map(Node::into_block).collect(), })) } @@ -57,17 +30,6 @@ pub struct GridNode { pub children: Vec<PackedNode>, } -/// Defines how to size a grid cell along an axis. -#[derive(Debug, Copy, Clone, Eq, PartialEq, Hash)] -pub enum TrackSizing { - /// Fit the cell to its contents. - Auto, - /// A length stated in absolute values and/or relative to the parent's size. - Linear(Linear), - /// A length that is the fraction of the remaining free space in the parent. - Fractional(Fractional), -} - impl Layout for GridNode { fn layout( &self, @@ -85,6 +47,42 @@ impl Layout for GridNode { } } +/// Defines how to size a grid cell along an axis. +#[derive(Debug, Copy, Clone, Eq, PartialEq, Hash)] +pub enum TrackSizing { + /// Fit the cell to its contents. + Auto, + /// A length stated in absolute values and/or relative to the parent's size. + Linear(Linear), + /// A length that is the fraction of the remaining free space in the parent. + Fractional(Fractional), +} + +castable! { + Vec<TrackSizing>, + Expected: "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(v) => vec![TrackSizing::Auto; Value::Int(v).cast()?], + Value::Array(values) => values + .into_iter() + .filter_map(|v| v.cast().ok()) + .collect(), +} + +castable! { + TrackSizing, + Expected: "auto, linear, or fractional", + Value::Auto => Self::Auto, + Value::Length(v) => Self::Linear(v.into()), + Value::Relative(v) => Self::Linear(v.into()), + Value::Linear(v) => Self::Linear(v), + Value::Fractional(v) => Self::Fractional(v), +} + /// Performs grid layout. struct GridLayouter<'a> { /// The children of the grid. |
