From 4f39e253538d27c355bf4c90bf5c9d5662ef831d Mon Sep 17 00:00:00 2001 From: Paolo Borelli Date: Sun, 19 Aug 2018 21:59:56 +0200 Subject: 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. --- librsvg/rsvg-load.c | 12 ++++++------ rsvg_internals/src/lib.rs | 4 ++-- rsvg_internals/src/load.rs | 17 +++++++++++++++++ rsvg_internals/src/structure.rs | 25 +++++++++++-------------- 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(&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); - } - }); -} -- cgit v1.2.1