[librsvg: 3/17] Move the code that gathers the filter primitive nodes




commit 0ae550ecfed582c025a02fe8581bf4520909b61d
Author: Federico Mena Quintero <federico gnome org>
Date:   Fri Apr 16 17:06:44 2021 -0500

    Move the code that gathers the filter primitive nodes
    
    We'll try to extract that to the caller, so that filters::render()
    just gets a list of user-space primitives and their parameters.

 src/filters/mod.rs | 36 +++++++++++++++++++-----------------
 1 file changed, 19 insertions(+), 17 deletions(-)
---
diff --git a/src/filters/mod.rs b/src/filters/mod.rs
index 30e57d5a..4e023005 100644
--- a/src/filters/mod.rs
+++ b/src/filters/mod.rs
@@ -217,6 +217,24 @@ pub fn render(
     let filter_node = &*filter_node;
     assert!(is_element_of_type!(filter_node, Filter));
 
+    let primitive_nodes: Vec<Node> = filter_node
+        .children()
+        .filter(|c| c.is_element())
+        // Skip nodes in error.
+        .filter(|c| {
+            let in_error = c.borrow_element().is_in_error();
+
+            if in_error {
+                rsvg_log!("(ignoring filter primitive {} because it is in error)", c);
+            }
+
+            !in_error
+        })
+        // Keep only filter primitives (those that implement the Filter trait)
+        .filter(|c| c.borrow_element().as_filter_effect().is_some())
+        .map(|n| n.clone())
+        .collect();
+
     let filter_element = filter_node.borrow_element();
 
     if filter_element.is_in_error() {
@@ -242,23 +260,7 @@ pub fn render(
         transform,
         node_bbox,
     ) {
-        let primitives = filter_node
-            .children()
-            .filter(|c| c.is_element())
-            // Skip nodes in error.
-            .filter(|c| {
-                let in_error = c.borrow_element().is_in_error();
-
-                if in_error {
-                    rsvg_log!("(ignoring filter primitive {} because it is in error)", c);
-                }
-
-                !in_error
-            })
-            // Keep only filter primitives (those that implement the Filter trait)
-            .filter(|c| c.borrow_element().as_filter_effect().is_some());
-
-        for primitive_node in primitives {
+        for primitive_node in primitive_nodes {
             let elt = primitive_node.borrow_element();
             let filter = elt.as_filter_effect().unwrap();
 


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