[librsvg/librsvg-2.42] Keep track of how many elements get instanced through <use> nodes



commit 2aeaac79265f9e916fdd8ff3990287fc9cbf119b
Author: Federico Mena Quintero <federico gnome org>
Date:   Wed Aug 22 11:00:19 2018 -0500

    Keep track of how many elements get instanced through <use> nodes

 librsvg/rsvg-base.c               | 6 ++++++
 librsvg/rsvg-private.h            | 1 +
 rsvg_internals/src/drawing_ctx.rs | 8 ++++++++
 rsvg_internals/src/structure.rs   | 2 ++
 4 files changed, 17 insertions(+)
---
diff --git a/librsvg/rsvg-base.c b/librsvg/rsvg-base.c
index f9a0a1b4..2cd7ccb6 100644
--- a/librsvg/rsvg-base.c
+++ b/librsvg/rsvg-base.c
@@ -1740,6 +1740,12 @@ rsvg_drawing_ctx_release_node (RsvgDrawingCtx * ctx, RsvgNode *node)
   ctx->acquired_nodes = g_slist_remove (ctx->acquired_nodes, node);
 }
 
+void
+rsvg_drawing_ctx_increase_num_elements_rendered_through_use (RsvgDrawingCtx *draw_ctx)
+{
+    draw_ctx->num_elements_rendered_through_use++;
+}
+
 void
 rsvg_drawing_ctx_add_node_and_ancestors_to_stack (RsvgDrawingCtx *draw_ctx, RsvgNode *node)
 {
diff --git a/librsvg/rsvg-private.h b/librsvg/rsvg-private.h
index 81555866..5424ebab 100644
--- a/librsvg/rsvg-private.h
+++ b/librsvg/rsvg-private.h
@@ -200,6 +200,7 @@ struct RsvgDrawingCtx {
     RsvgState *state;
     GError **error;
     RsvgDefs *defs;
+    gsize num_elements_rendered_through_use;
     PangoContext *pango_context;
     double dpi_x, dpi_y;
     RsvgViewBox vb;
diff --git a/rsvg_internals/src/drawing_ctx.rs b/rsvg_internals/src/drawing_ctx.rs
index 54d1b92b..79f0c9f6 100644
--- a/rsvg_internals/src/drawing_ctx.rs
+++ b/rsvg_internals/src/drawing_ctx.rs
@@ -45,6 +45,8 @@ extern "C" {
 
     fn rsvg_drawing_ctx_release_node(draw_ctx: *const RsvgDrawingCtx, node: *mut RsvgNode);
 
+    fn rsvg_drawing_ctx_increase_num_elements_rendered_through_use(draw_ctx: *const RsvgDrawingCtx);
+
     fn rsvg_drawing_ctx_get_current_state_affine(draw_ctx: *const RsvgDrawingCtx) -> cairo::Matrix;
 
     fn rsvg_drawing_ctx_set_current_state_affine(
@@ -288,6 +290,12 @@ pub fn state_pop(draw_ctx: *const RsvgDrawingCtx) {
     }
 }
 
+pub fn increase_num_elements_rendered_through_use(draw_ctx: *const RsvgDrawingCtx) {
+    unsafe {
+        rsvg_drawing_ctx_increase_num_elements_rendered_through_use(draw_ctx);
+    }
+}
+
 pub struct AcquiredNode(*const RsvgDrawingCtx, *mut RsvgNode);
 
 impl Drop for AcquiredNode {
diff --git a/rsvg_internals/src/structure.rs b/rsvg_internals/src/structure.rs
index 0b2e183e..71c9ff09 100644
--- a/rsvg_internals/src/structure.rs
+++ b/rsvg_internals/src/structure.rs
@@ -291,6 +291,8 @@ impl NodeTrait for NodeUse {
             return;
         }
 
+        drawing_ctx::increase_num_elements_rendered_through_use(draw_ctx);
+
         let nx = self.x.get().normalize(draw_ctx);
         let ny = self.y.get().normalize(draw_ctx);
 


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