From 76fc4cca62f5b955200b2c62cc85b69eea491ece Mon Sep 17 00:00:00 2001 From: Laurenz Date: Thu, 25 Mar 2021 21:32:33 +0100 Subject: =?UTF-8?q?Refactor=20alignments=20&=20directions=20=F0=9F=93=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Adds lang function - Refactors execution context - Adds StackChild and ParChild enums --- src/layout/node.rs | 108 ----------------------------------------------------- 1 file changed, 108 deletions(-) delete mode 100644 src/layout/node.rs (limited to 'src/layout/node.rs') diff --git a/src/layout/node.rs b/src/layout/node.rs deleted file mode 100644 index 443a96ae..00000000 --- a/src/layout/node.rs +++ /dev/null @@ -1,108 +0,0 @@ -use std::any::Any; -use std::fmt::{self, Debug, Formatter}; - -use super::*; - -/// A self-contained layout node. -#[derive(Clone, PartialEq)] -pub enum Node { - /// A text node. - Text(TextNode), - /// A spacing node. - Spacing(SpacingNode), - /// A dynamic node that can implement custom layouting behaviour. - Any(AnyNode), -} - -impl Layout for Node { - fn layout(&self, ctx: &mut LayoutContext, areas: &Areas) -> Fragment { - match self { - Self::Spacing(spacing) => spacing.layout(ctx, areas), - Self::Text(text) => text.layout(ctx, areas), - Self::Any(any) => any.layout(ctx, areas), - } - } -} - -impl Debug for Node { - fn fmt(&self, f: &mut Formatter) -> fmt::Result { - match self { - Self::Spacing(spacing) => spacing.fmt(f), - Self::Text(text) => text.fmt(f), - Self::Any(any) => any.fmt(f), - } - } -} - -/// A wrapper around a dynamic layouting node. -pub struct AnyNode(Box); - -impl AnyNode { - /// Create a new instance from any node that satisifies the required bounds. - pub fn new(any: T) -> Self - where - T: Layout + Debug + Clone + PartialEq + 'static, - { - Self(Box::new(any)) - } -} - -impl Layout for AnyNode { - fn layout(&self, ctx: &mut LayoutContext, areas: &Areas) -> Fragment { - self.0.layout(ctx, areas) - } -} - -impl Clone for AnyNode { - fn clone(&self) -> Self { - Self(self.0.dyn_clone()) - } -} - -impl PartialEq for AnyNode { - fn eq(&self, other: &Self) -> bool { - self.0.dyn_eq(other.0.as_ref()) - } -} - -impl Debug for AnyNode { - fn fmt(&self, f: &mut Formatter) -> fmt::Result { - self.0.fmt(f) - } -} - -impl From for Node -where - T: Into, -{ - fn from(t: T) -> Self { - Self::Any(t.into()) - } -} - -trait Bounds: Layout + Debug + 'static { - fn as_any(&self) -> &dyn Any; - fn dyn_eq(&self, other: &dyn Bounds) -> bool; - fn dyn_clone(&self) -> Box; -} - -impl Bounds for T -where - T: Layout + Debug + PartialEq + Clone + 'static, -{ - fn as_any(&self) -> &dyn Any { - self - } - - fn dyn_eq(&self, other: &dyn Bounds) -> bool { - if let Some(other) = other.as_any().downcast_ref::() { - self == other - } else { - false - } - } - - fn dyn_clone(&self) -> Box { - Box::new(self.clone()) - } -} -- cgit v1.2.3