[librsvg: 4/10] drawing_ctx: move width and height fields out of render



commit 30696b1db2de56ff380e6dd5455f36523309657a
Author: Paolo Borelli <pborelli gnome org>
Date:   Sun May 13 12:20:31 2018 +0200

    drawing_ctx: move width and height fields out of render

 librsvg/filters/common.c    |  2 +-
 librsvg/rsvg-base.c         |  4 +++-
 librsvg/rsvg-cairo-draw.c   | 17 +++++++++++------
 librsvg/rsvg-cairo-render.c |  4 +---
 librsvg/rsvg-cairo-render.h |  4 +---
 librsvg/rsvg-private.h      |  1 +
 6 files changed, 18 insertions(+), 14 deletions(-)
---
diff --git a/librsvg/filters/common.c b/librsvg/filters/common.c
index bb760e59..7618f0f6 100644
--- a/librsvg/filters/common.c
+++ b/librsvg/filters/common.c
@@ -585,7 +585,7 @@ rsvg_compile_bg (RsvgDrawingCtx * ctx)
     double x, y;
     GList *i;
 
-    surface = _rsvg_image_surface_new (render->width, render->height);
+    surface = _rsvg_image_surface_new (ctx->width, ctx->height);
     if (surface == NULL)
         return NULL;
 
diff --git a/librsvg/rsvg-base.c b/librsvg/rsvg-base.c
index f9b1356e..0ca35f1e 100644
--- a/librsvg/rsvg-base.c
+++ b/librsvg/rsvg-base.c
@@ -167,7 +167,7 @@ rsvg_drawing_ctx_new (cairo_t *cr, RsvgHandle *handle)
                                                data.width, data.height,
                                                &bbx0, &bby0, &bbx1, &bby1);
 
-    render = rsvg_cairo_render_new (cr, bbx1 - bbx0, bby1 - bby0);
+    render = rsvg_cairo_render_new (cr);
 
     if (!render)
         return NULL;
@@ -176,6 +176,8 @@ rsvg_drawing_ctx_new (cairo_t *cr, RsvgHandle *handle)
 
     draw->offset_x = bbx0;
     draw->offset_y = bby0;
+    draw->width = bbx1 - bbx0;
+    draw->height = bby1 - bby0;
 
     draw->state = NULL;
 
diff --git a/librsvg/rsvg-cairo-draw.c b/librsvg/rsvg-cairo-draw.c
index 5102a453..5773a837 100644
--- a/librsvg/rsvg-cairo-draw.c
+++ b/librsvg/rsvg-cairo-draw.c
@@ -193,7 +193,8 @@ rsvg_cairo_generate_mask (cairo_t * cr, RsvgNode *mask, RsvgDrawingCtx *ctx)
     RsvgState *state;
     guint8 opacity;
     guint8 *pixels;
-    guint32 width = render->width, height = render->height;
+    guint32 width = ctx->width;
+    guint32 height = ctx->height;
     guint32 rowstride, row, i;
     cairo_matrix_t affinesave;
     RsvgLength mask_x, mask_y, mask_w, mask_h;
@@ -469,10 +470,10 @@ rsvg_cairo_push_render_stack (RsvgDrawingCtx * ctx)
     if (!filter) {
         surface = cairo_surface_create_similar (cairo_get_target (render->cr),
                                                 CAIRO_CONTENT_COLOR_ALPHA,
-                                                render->width, render->height);
+                                                ctx->width, ctx->height);
     } else {
         surface = cairo_image_surface_create (CAIRO_FORMAT_ARGB32,
-                                              render->width, render->height);
+                                              ctx->width, ctx->height);
 
         /* The surface reference is owned by the child_cr created below and put on the cr_stack! */
         render->surfaces_stack = g_list_prepend (render->surfaces_stack, surface);
@@ -648,7 +649,8 @@ rsvg_cairo_get_surface_of_node (RsvgDrawingCtx *ctx,
     RsvgCairoRender *save_render = ctx->render;
     double save_x = ctx->offset_x;
     double save_y = ctx->offset_y;
-    RsvgCairoRender *render;
+    double save_w = ctx->width;
+    double save_h = ctx->height;
 
     surface = cairo_image_surface_create (CAIRO_FORMAT_ARGB32, width, height);
     if (cairo_surface_status (surface) != CAIRO_STATUS_SUCCESS) {
@@ -658,10 +660,11 @@ rsvg_cairo_get_surface_of_node (RsvgDrawingCtx *ctx,
 
     cr = cairo_create (surface);
 
-    render = rsvg_cairo_render_new (cr, width, height);
-    ctx->render = render;
+    ctx->render = rsvg_cairo_render_new (cr);
     ctx->offset_x = 0;
     ctx->offset_y = 0;
+    ctx->width = width;
+    ctx->height = height;
 
     rsvg_drawing_ctx_draw_node_from_stack (ctx, drawable, 0, FALSE);
 
@@ -671,6 +674,8 @@ rsvg_cairo_get_surface_of_node (RsvgDrawingCtx *ctx,
     ctx->render = save_render;
     ctx->offset_x = save_x;
     ctx->offset_y = save_y;
+    ctx->width = save_w;
+    ctx->height = save_h;
 
     return surface;
 }
diff --git a/librsvg/rsvg-cairo-render.c b/librsvg/rsvg-cairo-render.c
index a059261e..f750bf80 100644
--- a/librsvg/rsvg-cairo-render.c
+++ b/librsvg/rsvg-cairo-render.c
@@ -42,12 +42,10 @@
 #include "rsvg-structure.h"
 
 RsvgCairoRender *
-rsvg_cairo_render_new (cairo_t * cr, double width, double height)
+rsvg_cairo_render_new (cairo_t *cr)
 {
     RsvgCairoRender *cairo_render = g_new0 (RsvgCairoRender, 1);
 
-    cairo_render->width = width;
-    cairo_render->height = height;
     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 d96f89cc..07ee8e1e 100644
--- a/librsvg/rsvg-cairo-render.h
+++ b/librsvg/rsvg-cairo-render.h
@@ -35,8 +35,6 @@ G_BEGIN_DECLS
 
 struct _RsvgCairoRender {
     cairo_t *cr;
-    double width;
-    double height;
 
     cairo_t *initial_cr;
 
@@ -45,7 +43,7 @@ struct _RsvgCairoRender {
 };
 
 G_GNUC_INTERNAL
-RsvgCairoRender *rsvg_cairo_render_new (cairo_t *cr, double width, double height);
+RsvgCairoRender *rsvg_cairo_render_new (cairo_t *cr);
 
 G_GNUC_INTERNAL
 void rsvg_cairo_render_free (RsvgCairoRender *render);
diff --git a/librsvg/rsvg-private.h b/librsvg/rsvg-private.h
index 520b8105..004bc335 100644
--- a/librsvg/rsvg-private.h
+++ b/librsvg/rsvg-private.h
@@ -193,6 +193,7 @@ struct RsvgDrawingCtx {
     GSList *acquired_nodes;
     gboolean is_testing;
     double offset_x, offset_y;
+    double width, height;
     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]