[librsvg: 3/7] element: set the atts directly in the create fn



commit 0b365f60269c35bc868aff9c1be5ba976afec37d
Author: Paolo Borelli <pborelli gnome org>
Date:   Sat Mar 28 12:42:12 2020 +0100

    element: set the atts directly in the create fn

 rsvg_internals/src/document.rs | 9 +++++----
 rsvg_internals/src/element.rs  | 8 ++++++--
 rsvg_internals/src/node.rs     | 5 +++--
 3 files changed, 14 insertions(+), 8 deletions(-)
---
diff --git a/rsvg_internals/src/document.rs b/rsvg_internals/src/document.rs
index e93d50b9..cda56a96 100644
--- a/rsvg_internals/src/document.rs
+++ b/rsvg_internals/src/document.rs
@@ -453,7 +453,11 @@ impl DocumentBuilder {
         pbag: &PropertyBag,
         parent: Option<Node>,
     ) -> Node {
-        let mut node = Node::new(NodeData::new_element(name, pbag));
+        let node = Node::new(NodeData::new_element(
+            name,
+            pbag,
+            self.load_options.locale(),
+        ));
 
         if let Some(id) = node.borrow_element().get_id() {
             // This is so we don't overwrite an existing id
@@ -462,9 +466,6 @@ impl DocumentBuilder {
                 .or_insert_with(|| node.clone());
         }
 
-        node.borrow_element_mut()
-            .set_atts(pbag, self.load_options.locale());
-
         if let Some(mut parent) = parent {
             parent.append(node.clone());
         } else if self.tree.is_none() {
diff --git a/rsvg_internals/src/element.rs b/rsvg_internals/src/element.rs
index 619287a8..a2a6ccbe 100644
--- a/rsvg_internals/src/element.rs
+++ b/rsvg_internals/src/element.rs
@@ -579,7 +579,7 @@ static ELEMENT_CREATORS: Lazy<HashMap<&'static str, (ElementCreateFn, ElementCre
 ///
 /// [`Element`]: type.Element.html
 /// [`NonRendering`]: ../structure/struct.NonRendering.html
-pub fn create_element(name: &QualName, pbag: &PropertyBag) -> Element {
+pub fn create_element(name: &QualName, pbag: &PropertyBag, locale: &Locale) -> Element {
     let mut id = None;
     let mut class = None;
 
@@ -617,7 +617,11 @@ pub fn create_element(name: &QualName, pbag: &PropertyBag) -> Element {
 
     //    sizes::print_sizes();
 
-    create_fn(name, id, class)
+    let mut element = create_fn(name, id, class);
+
+    element.set_atts(pbag, locale);
+
+    element
 }
 
 #[cfg(ignore)]
diff --git a/rsvg_internals/src/node.rs b/rsvg_internals/src/node.rs
index 54579fd5..2fc41f30 100644
--- a/rsvg_internals/src/node.rs
+++ b/rsvg_internals/src/node.rs
@@ -11,6 +11,7 @@
 //! [`Node`]: ../../rctree/struct.Node.html
 //! [`NodeData`]: struct.NodeData.html
 
+use locale_config::Locale;
 use markup5ever::QualName;
 use std::cell::{Ref, RefMut};
 use std::fmt;
@@ -74,8 +75,8 @@ pub enum NodeData {
 }
 
 impl NodeData {
-    pub fn new_element(name: &QualName, pbag: &PropertyBag) -> NodeData {
-        NodeData::Element(Box::new(create_element(name, pbag)))
+    pub fn new_element(name: &QualName, pbag: &PropertyBag, locale: &Locale) -> NodeData {
+        NodeData::Element(Box::new(create_element(name, pbag, locale)))
     }
 
     pub fn new_chars() -> NodeData {


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