[librsvg: 3/4] node: replace impl RsvgNode with two helper traits
- From: Federico Mena Quintero <federico src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [librsvg: 3/4] node: replace impl RsvgNode with two helper traits
- Date: Mon, 10 Jun 2019 13:42:37 +0000 (UTC)
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]