[librsvg: 3/10] drawing_ctx: move offset fields out of render



commit 1e6f3823ab06f36814cb79e91d283456e84bf06e
Author: Paolo Borelli <pborelli gnome org>
Date:   Sun May 13 12:15:14 2018 +0200

    drawing_ctx: move offset fields out of render

 librsvg/rsvg-base.c         | 13 +++++++------
 librsvg/rsvg-cairo-draw.c   |  7 ++++++-
 librsvg/rsvg-cairo-render.c |  2 --
 librsvg/rsvg-cairo-render.h |  2 --
 librsvg/rsvg-private.h      |  1 +
 5 files changed, 14 insertions(+), 11 deletions(-)
---
diff --git a/librsvg/rsvg-base.c b/librsvg/rsvg-base.c
index 57e78325..f9b1356e 100644
--- a/librsvg/rsvg-base.c
+++ b/librsvg/rsvg-base.c
@@ -173,8 +173,9 @@ rsvg_drawing_ctx_new (cairo_t *cr, RsvgHandle *handle)
         return NULL;
 
     draw->render = render;
-    render->offset_x = bbx0;
-    render->offset_y = bby0;
+
+    draw->offset_x = bbx0;
+    draw->offset_y = bby0;
 
     draw->state = NULL;
 
@@ -203,8 +204,8 @@ rsvg_drawing_ctx_new (cairo_t *cr, RsvgHandle *handle)
     /* adjust transform so that the corner of the bounding box above is
      * at (0,0) - we compensate for this in _set_rsvg_affine() in
      * rsvg-cairo-render.c and a few other places */
-    state_affine.x0 -= render->offset_x;
-    state_affine.y0 -= render->offset_y;
+    state_affine.x0 -= draw->offset_x;
+    state_affine.y0 -= draw->offset_y;
 
     rsvg_bbox_init (&draw->bbox, &state_affine);
     rsvg_bbox_init (&draw->ink_bbox, &state_affine);
@@ -646,11 +647,11 @@ void
 rsvg_drawing_ctx_get_offset (RsvgDrawingCtx *draw_ctx, double *x, double *y)
 {
     if (x != NULL) {
-        *x = draw_ctx->render->offset_x;
+        *x = draw_ctx->offset_x;
     }
 
     if (y != NULL) {
-        *y = draw_ctx->render->offset_y;
+        *y = draw_ctx->offset_y;
     }
 }
 
diff --git a/librsvg/rsvg-cairo-draw.c b/librsvg/rsvg-cairo-draw.c
index f4e6a907..5102a453 100644
--- a/librsvg/rsvg-cairo-draw.c
+++ b/librsvg/rsvg-cairo-draw.c
@@ -645,8 +645,9 @@ rsvg_cairo_get_surface_of_node (RsvgDrawingCtx *ctx,
 {
     cairo_surface_t *surface;
     cairo_t *cr;
-
     RsvgCairoRender *save_render = ctx->render;
+    double save_x = ctx->offset_x;
+    double save_y = ctx->offset_y;
     RsvgCairoRender *render;
 
     surface = cairo_image_surface_create (CAIRO_FORMAT_ARGB32, width, height);
@@ -659,6 +660,8 @@ rsvg_cairo_get_surface_of_node (RsvgDrawingCtx *ctx,
 
     render = rsvg_cairo_render_new (cr, width, height);
     ctx->render = render;
+    ctx->offset_x = 0;
+    ctx->offset_y = 0;
 
     rsvg_drawing_ctx_draw_node_from_stack (ctx, drawable, 0, FALSE);
 
@@ -666,6 +669,8 @@ rsvg_cairo_get_surface_of_node (RsvgDrawingCtx *ctx,
 
     rsvg_cairo_render_free (ctx->render);
     ctx->render = save_render;
+    ctx->offset_x = save_x;
+    ctx->offset_y = save_y;
 
     return surface;
 }
diff --git a/librsvg/rsvg-cairo-render.c b/librsvg/rsvg-cairo-render.c
index 16717461..a059261e 100644
--- a/librsvg/rsvg-cairo-render.c
+++ b/librsvg/rsvg-cairo-render.c
@@ -48,8 +48,6 @@ rsvg_cairo_render_new (cairo_t * cr, double width, double height)
 
     cairo_render->width = width;
     cairo_render->height = height;
-    cairo_render->offset_x = 0;
-    cairo_render->offset_y = 0;
     cairo_render->initial_cr = cr;
     cairo_render->cr = cr;
     cairo_render->cr_stack = NULL;
diff --git a/librsvg/rsvg-cairo-render.h b/librsvg/rsvg-cairo-render.h
index 405b9293..d96f89cc 100644
--- a/librsvg/rsvg-cairo-render.h
+++ b/librsvg/rsvg-cairo-render.h
@@ -39,8 +39,6 @@ struct _RsvgCairoRender {
     double height;
 
     cairo_t *initial_cr;
-    double offset_x;
-    double offset_y;
 
     GList *cr_stack;
     GList *surfaces_stack;
diff --git a/librsvg/rsvg-private.h b/librsvg/rsvg-private.h
index 18f8cace..520b8105 100644
--- a/librsvg/rsvg-private.h
+++ b/librsvg/rsvg-private.h
@@ -192,6 +192,7 @@ struct RsvgDrawingCtx {
     GSList *drawsub_stack;
     GSList *acquired_nodes;
     gboolean is_testing;
+    double offset_x, offset_y;
     RsvgBbox bbox;     /* Bounding box for path extents, without stroke width */
     RsvgBbox ink_bbox; /* Bounding box for ink rectangle, with everything */
     GList *bb_stack;


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