summaryrefslogtreecommitdiff
path: root/library/src/layout/grid.rs
diff options
context:
space:
mode:
Diffstat (limited to 'library/src/layout/grid.rs')
-rw-r--r--library/src/layout/grid.rs27
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 {