diff options
Diffstat (limited to 'library/src/layout/grid.rs')
| -rw-r--r-- | library/src/layout/grid.rs | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/library/src/layout/grid.rs b/library/src/layout/grid.rs index 85d464b1..eafe644f 100644 --- a/library/src/layout/grid.rs +++ b/library/src/layout/grid.rs @@ -120,6 +120,19 @@ impl GridNode { } .pack()) } + + fn field(&self, name: &str) -> Option<Value> { + match name { + "columns" => Some(TrackSizing::encode_slice(&self.tracks.x)), + "rows" => Some(TrackSizing::encode_slice(&self.tracks.y)), + "column-gutter" => Some(TrackSizing::encode_slice(&self.gutter.x)), + "row-gutter" => Some(TrackSizing::encode_slice(&self.gutter.y)), + "cells" => Some(Value::Array( + self.cells.iter().cloned().map(Value::Content).collect(), + )), + _ => None, + } + } } impl Layout for GridNode { @@ -157,6 +170,20 @@ pub enum TrackSizing { Fractional(Fr), } +impl TrackSizing { + pub fn encode(self) -> Value { + match self { + Self::Auto => Value::Auto, + Self::Relative(rel) => Spacing::Relative(rel).encode(), + Self::Fractional(fr) => Spacing::Fractional(fr).encode(), + } + } + + pub fn encode_slice(vec: &[TrackSizing]) -> Value { + Value::Array(vec.iter().copied().map(Self::encode).collect()) + } +} + impl From<Spacing> for TrackSizing { fn from(spacing: Spacing) -> Self { match spacing { |
