[librsvg] element: add Element::draw()



commit 2672f34df17e87b106103204ddbf294f2db93366
Author: Paolo Borelli <pborelli gnome org>
Date:   Sat Apr 4 12:37:52 2020 +0200

    element: add Element::draw()
    
    This encapsulates the drawing logic specific to an element.

 rsvg_internals/src/element.rs | 21 +++++++++++++++++++++
 rsvg_internals/src/node.rs    | 16 +---------------
 2 files changed, 22 insertions(+), 15 deletions(-)
---
diff --git a/rsvg_internals/src/element.rs b/rsvg_internals/src/element.rs
index efffe4b8..1617225d 100644
--- a/rsvg_internals/src/element.rs
+++ b/rsvg_internals/src/element.rs
@@ -350,6 +350,27 @@ impl Element {
     pub fn is_in_error(&self) -> bool {
         self.result.is_err()
     }
+
+    pub fn draw(
+        &self,
+        node: &Node,
+        acquired_nodes: &mut AcquiredNodes,
+        cascaded: &CascadedValues<'_>,
+        draw_ctx: &mut DrawingCtx,
+        clipping: bool,
+    ) -> Result<BoundingBox, RenderingError> {
+        if !self.is_in_error() {
+            draw_ctx.with_saved_transform(Some(self.transform), &mut |dc| {
+                self.element_impl
+                    .draw(node, acquired_nodes, cascaded, dc, clipping)
+            })
+        } else {
+            rsvg_log!("(not rendering element {} because it is in error)", self);
+
+            // maybe we should actually return a RenderingError::ElementIsInError here?
+            Ok(draw_ctx.empty_bbox())
+        }
+    }
 }
 
 impl fmt::Display for Element {
diff --git a/rsvg_internals/src/node.rs b/rsvg_internals/src/node.rs
index 54579fd5..856ac24d 100644
--- a/rsvg_internals/src/node.rs
+++ b/rsvg_internals/src/node.rs
@@ -283,21 +283,7 @@ impl NodeDraw for Node {
         clipping: bool,
     ) -> Result<BoundingBox, RenderingError> {
         match *self.borrow() {
-            NodeData::Element(ref e) => {
-                if !e.is_in_error() {
-                    let transform = e.get_transform();
-                    draw_ctx.with_saved_transform(Some(transform), &mut |dc| {
-                        e.get_element_trait()
-                            .draw(self, acquired_nodes, cascaded, dc, clipping)
-                    })
-                } else {
-                    rsvg_log!("(not rendering element {} because it is in error)", self);
-
-                    // maybe we should actually return a RenderingError::NodeIsInError here?
-                    Ok(draw_ctx.empty_bbox())
-                }
-            }
-
+            NodeData::Element(ref e) => e.draw(self, acquired_nodes, cascaded, draw_ctx, clipping),
             _ => Ok(draw_ctx.empty_bbox()),
         }
     }


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