[librsvg] element: move is_accessed_by_reference method



commit 879775ec60c1a6f972208885f29ad6d545ee3883
Author: Paolo Borelli <pborelli gnome org>
Date:   Sat Apr 4 23:18:47 2020 +0200

    element: move is_accessed_by_reference method

 rsvg_internals/src/document.rs | 19 +------------------
 rsvg_internals/src/element.rs  | 12 ++++++++++++
 2 files changed, 13 insertions(+), 18 deletions(-)
---
diff --git a/rsvg_internals/src/document.rs b/rsvg_internals/src/document.rs
index 2d8cf50f..55c32ba2 100644
--- a/rsvg_internals/src/document.rs
+++ b/rsvg_internals/src/document.rs
@@ -343,7 +343,7 @@ impl<'i> AcquiredNodes<'i> {
 
         let node = self.lookup_node(fragment, element_types)?;
 
-        if node_is_accessed_by_reference(&node) {
+        if node.is_element() && node.borrow_element().is_accessed_by_reference() {
             self.acquire_ref(&node)
         } else {
             Ok(AcquiredNode {
@@ -366,23 +366,6 @@ impl<'i> AcquiredNodes<'i> {
     }
 }
 
-// Returns whether a node of a particular type is only accessed by reference
-// from other nodes' atributes.  The node could in turn cause other nodes
-// to get referenced, potentially causing reference cycles.
-fn node_is_accessed_by_reference(node: &Node) -> bool {
-    use ElementType::*;
-
-    if !node.is_element() {
-        return false;
-    }
-
-    match node.borrow_element().get_type() {
-        ClipPath | Filter | LinearGradient | Marker | Mask | Pattern | RadialGradient => true,
-
-        _ => false,
-    }
-}
-
 /// Keeps a stack of nodes and can check if a certain node is contained in the stack
 ///
 /// Sometimes parts of the code cannot plainly use the implicit stack of acquired
diff --git a/rsvg_internals/src/element.rs b/rsvg_internals/src/element.rs
index f547c099..53335df7 100644
--- a/rsvg_internals/src/element.rs
+++ b/rsvg_internals/src/element.rs
@@ -383,6 +383,18 @@ impl Element {
     pub fn as_filter_effect(&self) -> Option<&dyn FilterEffect> {
         self.element_impl.as_filter_effect()
     }
+
+    /// Returns whether an element of a particular type is only accessed by reference
+    // from other elements' attributes.  The element could in turn cause other nodes
+    // to get referenced, potentially causing reference cycles.
+    pub fn is_accessed_by_reference(&self) -> bool {
+        use ElementType::*;
+
+        match self.element_type {
+            ClipPath | Filter | LinearGradient | Marker | Mask | Pattern | RadialGradient => true,
+            _ => false,
+        }
+    }
 }
 
 impl fmt::Display for Element {


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