summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaolo Borelli <pborelli@gnome.org>2018-08-19 21:59:56 +0200
committerPaolo Borelli <pborelli@gnome.org>2018-08-20 12:49:04 +0200
commit4f39e253538d27c355bf4c90bf5c9d5662ef831d (patch)
tree2880024454718b176fb3d235eaab1e9caf1a8150
parentccf35bd764a69dc1b2673a37c65053684e7a8171 (diff)
downloadlibrsvg-4f39e253538d27c355bf4c90bf5c9d5662ef831d.tar.gz
load: move here the helper to set atts on the svg nodes
This is more symmetric with the code for the other nodes, which is already in rsvg_load_set_node_atts.
-rw-r--r--librsvg/rsvg-load.c12
-rw-r--r--rsvg_internals/src/lib.rs4
-rw-r--r--rsvg_internals/src/load.rs17
-rw-r--r--rsvg_internals/src/structure.rs25
4 files changed, 36 insertions, 22 deletions
diff --git a/librsvg/rsvg-load.c b/librsvg/rsvg-load.c
index a1614072..5bd20016 100644
--- a/librsvg/rsvg-load.c
+++ b/librsvg/rsvg-load.c
@@ -46,13 +46,13 @@ RsvgNode *rsvg_load_new_node (const char *element_name, RsvgNode *parent, RsvgPr
G_GNUC_INTERNAL
void rsvg_load_set_node_atts (RsvgHandle *handle, RsvgNode *node, const char *element_name, RsvgPropertyBag atts);
-/* Implemented in rsvg_internals/src/node.rs */
+/* Implemented in rsvg_internals/src/load.rs */
G_GNUC_INTERNAL
-void rsvg_node_register_in_defs(RsvgNode *node, RsvgDefs *defs);
+void rsvg_load_set_svg_node_atts (RsvgHandle *handle, RsvgNode *node);
-/* Implemented in rsvg_internals/src/structure.rs */
+/* Implemented in rsvg_internals/src/node.rs */
G_GNUC_INTERNAL
-void rsvg_node_svg_apply_atts (RsvgNode *node, RsvgHandle *handle);
+void rsvg_node_register_in_defs(RsvgNode *node, RsvgDefs *defs);
struct RsvgLoad {
RsvgHandle *handle;
@@ -663,8 +663,8 @@ sax_end_element_cb (void *data, const xmlChar * xmlname)
load->handler = NULL;
}
- if (load->currentnode && rsvg_node_get_type (load->currentnode) == RSVG_NODE_TYPE_SVG) {
- rsvg_node_svg_apply_atts (load->currentnode, load->handle);
+ if (load->currentnode) {
+ rsvg_load_set_svg_node_atts (load->handle, load->currentnode);
}
if (load->currentnode && topmost_element_name_is (load, name)) {
diff --git a/rsvg_internals/src/lib.rs b/rsvg_internals/src/lib.rs
index ee66da4f..ab7b1bb8 100644
--- a/rsvg_internals/src/lib.rs
+++ b/rsvg_internals/src/lib.rs
@@ -40,7 +40,7 @@ pub use drawing_ctx::{
rsvg_drawing_ctx_new,
};
-pub use load::{rsvg_load_new_node, rsvg_load_set_node_atts};
+pub use load::{rsvg_load_new_node, rsvg_load_set_node_atts, rsvg_load_set_svg_node_atts};
pub use node::{
rsvg_node_add_child,
@@ -68,7 +68,7 @@ pub use property_bag::{
pub use state::{rsvg_state_free, rsvg_state_new, rsvg_state_parse_style_pair};
-pub use structure::{rsvg_node_svg_apply_atts, rsvg_node_svg_get_size};
+pub use structure::rsvg_node_svg_get_size;
pub use text::{rsvg_node_chars_append, rsvg_node_chars_new};
diff --git a/rsvg_internals/src/load.rs b/rsvg_internals/src/load.rs
index 8cc95199..34d8b564 100644
--- a/rsvg_internals/src/load.rs
+++ b/rsvg_internals/src/load.rs
@@ -356,3 +356,20 @@ pub extern "C" fn rsvg_load_set_node_atts(
node.set_overridden_properties();
}
+
+#[no_mangle]
+pub extern "C" fn rsvg_load_set_svg_node_atts(
+ handle: *const RsvgHandle,
+ raw_node: *const RsvgNode,
+) {
+ assert!(!raw_node.is_null());
+ let node: &RsvgNode = unsafe { &*raw_node };
+
+ if node.get_type() != NodeType::Svg {
+ return;
+ }
+
+ node.with_impl(|svg: &NodeSvg| {
+ svg.with_pbag(|pbag| parse_style_attrs(handle, node, "svg", pbag));
+ });
+}
diff --git a/rsvg_internals/src/structure.rs b/rsvg_internals/src/structure.rs
index e818d4ce..7bfff648 100644
--- a/rsvg_internals/src/structure.rs
+++ b/rsvg_internals/src/structure.rs
@@ -14,7 +14,7 @@ use libc;
use node::*;
use parsers::{parse, parse_and_validate, Parse};
use property_bag::{OwnedPropertyBag, PropertyBag};
-use state::{self, Overflow};
+use state::Overflow;
use viewbox::*;
use viewport::{draw_in_viewport, ClipMode};
@@ -112,6 +112,16 @@ impl NodeSvg {
pbag: RefCell::new(None),
}
}
+
+ pub fn with_pbag<F>(&self, f: F)
+ where
+ F: FnOnce(&PropertyBag),
+ {
+ self.pbag
+ .borrow()
+ .as_ref()
+ .map(|p| f(&PropertyBag::from_owned(p)));
+ }
}
impl NodeTrait for NodeSvg {
@@ -430,16 +440,3 @@ pub extern "C" fn rsvg_node_svg_get_size(
},
)
}
-
-#[no_mangle]
-pub extern "C" fn rsvg_node_svg_apply_atts(raw_node: *const RsvgNode, handle: *const RsvgHandle) {
- assert!(!raw_node.is_null());
- let node: &RsvgNode = unsafe { &*raw_node };
-
- node.with_impl(|svg: &NodeSvg| {
- if let Some(owned_pbag) = svg.pbag.borrow().as_ref() {
- let pbag = PropertyBag::from_owned(owned_pbag);
- state::parse_style_attrs(handle, node, "svg", &pbag);
- }
- });
-}