[librsvg: 9/10] drawing_ctx: move push/pop_discrete_layer to rust



commit f84c08f7f53343e2b2f49072632be531f28d6a26
Author: Paolo Borelli <pborelli gnome org>
Date:   Sun May 13 16:13:02 2018 +0200

    drawing_ctx: move push/pop_discrete_layer to rust

 librsvg/rsvg-drawing-ctx.c        | 26 ++++----------------------
 librsvg/rsvg-drawing-ctx.h        |  4 ++--
 rsvg_internals/src/drawing_ctx.rs | 26 ++++++++++++++------------
 3 files changed, 20 insertions(+), 36 deletions(-)
---
diff --git a/librsvg/rsvg-drawing-ctx.c b/librsvg/rsvg-drawing-ctx.c
index f7356f2c..52e7867b 100644
--- a/librsvg/rsvg-drawing-ctx.c
+++ b/librsvg/rsvg-drawing-ctx.c
@@ -469,8 +469,8 @@ push_bounding_box (RsvgDrawingCtx *ctx)
     rsvg_bbox_init (&ctx->ink_bbox, &affine);
 }
 
-static void
-rsvg_drawing_ctx_push_render_stack (RsvgDrawingCtx * ctx)
+void
+rsvg_drawing_ctx_push_render_stack (RsvgDrawingCtx *ctx)
 {
     RsvgState *state;
     char *clip_path;
@@ -567,8 +567,8 @@ pop_bounding_box (RsvgDrawingCtx *ctx)
     ctx->ink_bb_stack = g_list_delete_link (ctx->ink_bb_stack, ctx->ink_bb_stack);
 }
 
-static void
-rsvg_drawing_ctx_pop_render_stack (RsvgDrawingCtx * ctx)
+void
+rsvg_drawing_ctx_pop_render_stack (RsvgDrawingCtx *ctx)
 {
     RsvgState *state;
     char *clip_path;
@@ -673,24 +673,6 @@ rsvg_drawing_ctx_pop_render_stack (RsvgDrawingCtx * ctx)
     }
 }
 
-void
-rsvg_drawing_ctx_push_discrete_layer (RsvgDrawingCtx *ctx, gboolean clipping)
-{
-    if (!clipping) {
-        cairo_save (ctx->cr);
-        rsvg_drawing_ctx_push_render_stack (ctx);
-    }
-}
-
-void
-rsvg_drawing_ctx_pop_discrete_layer (RsvgDrawingCtx *ctx, gboolean clipping)
-{
-    if (!clipping) {
-        rsvg_drawing_ctx_pop_render_stack (ctx);
-        cairo_restore (ctx->cr);
-    }
-}
-
 /*
  * rsvg_drawing_ctx_acquire_node:
  * @ctx: The drawing context in use
diff --git a/librsvg/rsvg-drawing-ctx.h b/librsvg/rsvg-drawing-ctx.h
index c9735df6..58285965 100644
--- a/librsvg/rsvg-drawing-ctx.h
+++ b/librsvg/rsvg-drawing-ctx.h
@@ -123,9 +123,9 @@ G_GNUC_INTERNAL
 PangoContext *rsvg_drawing_ctx_get_pango_context (RsvgDrawingCtx *ctx);
 
 G_GNUC_INTERNAL
-void         rsvg_drawing_ctx_push_discrete_layer (RsvgDrawingCtx *ctx, gboolean clipping);
+void         rsvg_drawing_ctx_push_render_stack (RsvgDrawingCtx *ctx);
 G_GNUC_INTERNAL
-void         rsvg_drawing_ctx_pop_discrete_layer (RsvgDrawingCtx *ctx, gboolean clipping);
+void         rsvg_drawing_ctx_pop_render_stack (RsvgDrawingCtx *ctx);
 
 G_GNUC_INTERNAL
 cairo_surface_t *rsvg_drawing_ctx_get_surface_of_node (RsvgDrawingCtx *ctx,
diff --git a/rsvg_internals/src/drawing_ctx.rs b/rsvg_internals/src/drawing_ctx.rs
index f266a0dd..c30fd7ef 100644
--- a/rsvg_internals/src/drawing_ctx.rs
+++ b/rsvg_internals/src/drawing_ctx.rs
@@ -83,14 +83,8 @@ extern "C" {
         draw_ctx: *const RsvgDrawingCtx,
     ) -> *mut pango_sys::PangoContext;
 
-    fn rsvg_drawing_ctx_push_discrete_layer(
-        draw_ctx: *const RsvgDrawingCtx,
-        clipping: glib_sys::gboolean
-    );
-    fn rsvg_drawing_ctx_pop_discrete_layer(
-        draw_ctx: *const RsvgDrawingCtx,
-        clipping: glib_sys::gboolean
-    );
+    fn rsvg_drawing_ctx_push_render_stack(draw_ctx: *const RsvgDrawingCtx);
+    fn rsvg_drawing_ctx_pop_render_stack(draw_ctx: *const RsvgDrawingCtx);
 }
 
 pub fn get_cairo_context(draw_ctx: *const RsvgDrawingCtx) -> cairo::Context {
@@ -260,14 +254,22 @@ pub fn state_reinherit_top(draw_ctx: *const RsvgDrawingCtx, state: &State, domin
 }
 
 pub fn push_discrete_layer(draw_ctx: *const RsvgDrawingCtx, clipping: bool) {
-    unsafe {
-        rsvg_drawing_ctx_push_discrete_layer(draw_ctx, clipping.to_glib());
+    if !clipping {
+        get_cairo_context(draw_ctx).save();
+
+        unsafe {
+            rsvg_drawing_ctx_push_render_stack(draw_ctx);
+        }
     }
 }
 
 pub fn pop_discrete_layer(draw_ctx: *const RsvgDrawingCtx, clipping: bool) {
-    unsafe {
-        rsvg_drawing_ctx_pop_discrete_layer(draw_ctx, clipping.to_glib());
+    if !clipping {
+        unsafe {
+            rsvg_drawing_ctx_pop_render_stack(draw_ctx);
+        }
+
+        get_cairo_context(draw_ctx).restore();
     }
 }
 


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