From 958f74f77707340f34ee36d09492bdb74523aa2a Mon Sep 17 00:00:00 2001 From: Laurenz Date: Thu, 16 Dec 2021 14:43:02 +0100 Subject: Set Rules Episode VIII: The First Macro --- src/layout/mod.rs | 27 ++++++++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) (limited to 'src/layout') diff --git a/src/layout/mod.rs b/src/layout/mod.rs index 4ede39b2..cf714f88 100644 --- a/src/layout/mod.rs +++ b/src/layout/mod.rs @@ -18,7 +18,7 @@ use std::rc::Rc; use crate::eval::Styles; use crate::font::FontStore; use crate::frame::Frame; -use crate::geom::{Align, Linear, Point, Sides, Spec, Transform}; +use crate::geom::{Align, Linear, Point, Sides, Size, Spec, Transform}; use crate::image::ImageStore; use crate::library::{AlignNode, DocumentNode, PadNode, SizedNode, TransformNode}; use crate::Context; @@ -232,6 +232,12 @@ impl PackedNode { } } +impl Default for PackedNode { + fn default() -> Self { + EmptyNode.pack() + } +} + impl Debug for PackedNode { fn fmt(&self, f: &mut Formatter) -> fmt::Result { if f.alternate() { @@ -282,3 +288,22 @@ where state.finish() } } + +/// A layout node that produces an empty frame. +/// +/// The packed version of this is returned by [`PackedNode::default`]. +#[derive(Debug, Hash)] +pub struct EmptyNode; + +impl Layout for EmptyNode { + fn layout( + &self, + _: &mut LayoutContext, + regions: &Regions, + ) -> Vec>> { + let size = regions.expand.select(regions.current, Size::zero()); + let mut cts = Constraints::new(regions.expand); + cts.exact = regions.current.filter(regions.expand); + vec![Frame::new(size).constrain(cts)] + } +} -- cgit v1.2.3