[librsvg: 3/4] node: replace impl RsvgNode with two helper traits



commit 99d3634779a1e8eb1acaf41cef42107333e075b8
Author: Paolo Borelli <pborelli gnome org>
Date:   Sun Jun 9 12:09:40 2019 +0200

    node: replace impl RsvgNode with two helper traits

 rsvg_internals/src/clip_path.rs   |  2 +-
 rsvg_internals/src/drawing_ctx.rs |  2 +-
 rsvg_internals/src/mask.rs        |  2 +-
 rsvg_internals/src/node.rs        | 32 ++++++++++++++++++++++++++++----
 rsvg_internals/src/svg.rs         |  2 +-
 5 files changed, 32 insertions(+), 8 deletions(-)
---
diff --git a/rsvg_internals/src/clip_path.rs b/rsvg_internals/src/clip_path.rs
index 385e37b1..570de6b5 100644
--- a/rsvg_internals/src/clip_path.rs
+++ b/rsvg_internals/src/clip_path.rs
@@ -7,7 +7,7 @@ use crate::bbox::BoundingBox;
 use crate::coord_units::CoordUnits;
 use crate::drawing_ctx::DrawingCtx;
 use crate::error::RenderingError;
-use crate::node::{CascadedValues, NodeResult, NodeTrait, RsvgNode};
+use crate::node::{CascadedValues, NodeDraw, NodeResult, NodeTrait, RsvgNode};
 use crate::parsers::ParseValue;
 use crate::property_bag::PropertyBag;
 
diff --git a/rsvg_internals/src/drawing_ctx.rs b/rsvg_internals/src/drawing_ctx.rs
index 56703fb8..1efeafd9 100644
--- a/rsvg_internals/src/drawing_ctx.rs
+++ b/rsvg_internals/src/drawing_ctx.rs
@@ -16,7 +16,7 @@ use crate::filters;
 use crate::gradient::NodeGradient;
 use crate::length::Dasharray;
 use crate::mask::NodeMask;
-use crate::node::{CascadedValues, NodeType, RsvgNode};
+use crate::node::{CascadedValues, NodeDraw, NodeType, RsvgNode};
 use crate::paint_server::{PaintServer, PaintSource};
 use crate::pattern::NodePattern;
 use crate::properties::ComputedValues;
diff --git a/rsvg_internals/src/mask.rs b/rsvg_internals/src/mask.rs
index 52d1c562..e07c3b74 100644
--- a/rsvg_internals/src/mask.rs
+++ b/rsvg_internals/src/mask.rs
@@ -7,7 +7,7 @@ use crate::coord_units::CoordUnits;
 use crate::drawing_ctx::{CompositingAffines, DrawingCtx};
 use crate::error::RenderingError;
 use crate::length::{LengthHorizontal, LengthVertical};
-use crate::node::{CascadedValues, NodeResult, NodeTrait, RsvgNode};
+use crate::node::{CascadedValues, NodeDraw, NodeResult, NodeTrait, RsvgNode};
 use crate::parsers::{Parse, ParseValue};
 use crate::property_bag::PropertyBag;
 use crate::property_defs::Opacity;
diff --git a/rsvg_internals/src/node.rs b/rsvg_internals/src/node.rs
index 56cc1366..db6bdea3 100644
--- a/rsvg_internals/src/node.rs
+++ b/rsvg_internals/src/node.rs
@@ -471,8 +471,13 @@ pub enum NodeType {
     FeTurbulence,
 }
 
-impl RsvgNode {
-    pub fn cascade(&self, values: &ComputedValues) {
+/// Helper trait for cascading recursively
+pub trait NodeCascade {
+    fn cascade(&self, values: &ComputedValues);
+}
+
+impl NodeCascade for RsvgNode {
+    fn cascade(&self, values: &ComputedValues) {
         let mut values = values.clone();
         self.borrow()
             .specified_values
@@ -484,8 +489,27 @@ impl RsvgNode {
             child.cascade(&values);
         }
     }
+}
+
+/// Helper trait for drawing recursively
+pub trait NodeDraw {
+    fn draw(
+        &self,
+        cascaded: &CascadedValues<'_>,
+        draw_ctx: &mut DrawingCtx,
+        clipping: bool,
+    ) -> Result<(), RenderingError>;
+
+    fn draw_children(
+        &self,
+        cascaded: &CascadedValues<'_>,
+        draw_ctx: &mut DrawingCtx,
+        clipping: bool,
+    ) -> Result<(), RenderingError>;
+}
 
-    pub fn draw(
+impl NodeDraw for RsvgNode {
+    fn draw(
         &self,
         cascaded: &CascadedValues<'_>,
         draw_ctx: &mut DrawingCtx,
@@ -507,7 +531,7 @@ impl RsvgNode {
         }
     }
 
-    pub fn draw_children(
+    fn draw_children(
         &self,
         cascaded: &CascadedValues<'_>,
         draw_ctx: &mut DrawingCtx,
diff --git a/rsvg_internals/src/svg.rs b/rsvg_internals/src/svg.rs
index c3fc42be..40c55270 100644
--- a/rsvg_internals/src/svg.rs
+++ b/rsvg_internals/src/svg.rs
@@ -10,7 +10,7 @@ use crate::allowed_url::{AllowedUrl, Fragment};
 use crate::error::LoadingError;
 use crate::handle::LoadOptions;
 use crate::io::{self, BinaryData};
-use crate::node::{NodeType, RsvgNode};
+use crate::node::{NodeCascade, NodeType, RsvgNode};
 use crate::properties::ComputedValues;
 use crate::structure::{IntrinsicDimensions, NodeSvg};
 use crate::surface_utils::shared_surface::SharedImageSurface;


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]