[librsvg] draw_ctx.rs: New functions to get/set the current state's affine



commit 4e8b8b848678d756d200448825af4c111e85a24b
Author: Federico Mena Quintero <federico gnome org>
Date:   Fri Jan 27 18:37:14 2017 -0600

    draw_ctx.rs: New functions to get/set the current state's affine
    
    Eventually we'll have a big-hammer function to get the whole current
    state and smaller functions to operate on *that*.  But for now,
    this solves our need to have access to the current affine in pattern.rs.

 rsvg-base.c             |   13 +++++++++++++
 rsvg-private.h          |    6 ++++++
 rust/src/drawing_ctx.rs |   23 +++++++++++++++++++----
 3 files changed, 38 insertions(+), 4 deletions(-)
---
diff --git a/rsvg-base.c b/rsvg-base.c
index 9d9b494..65f59bc 100644
--- a/rsvg-base.c
+++ b/rsvg-base.c
@@ -2309,6 +2309,19 @@ rsvg_drawing_ctx_release_node (RsvgDrawingCtx * ctx, RsvgNode *node)
   ctx->acquired_nodes = g_slist_remove (ctx->acquired_nodes, node);
 }
 
+cairo_matrix_t
+rsvg_drawing_ctx_get_current_state_affine (RsvgDrawingCtx *ctx)
+{
+    return rsvg_current_state (ctx)->affine;
+}
+
+void
+rsvg_drawing_ctx_set_current_state_affine (RsvgDrawingCtx *ctx, cairo_matrix_t *affine)
+{
+    rsvg_current_state (ctx)->personal_affine =
+        rsvg_current_state (ctx)->affine = *affine;
+}
+
 void
 rsvg_render_path_builder (RsvgDrawingCtx * ctx, RsvgPathBuilder *builder)
 {
diff --git a/rsvg-private.h b/rsvg-private.h
index b5139f9..ce8d609 100644
--- a/rsvg-private.h
+++ b/rsvg-private.h
@@ -464,6 +464,12 @@ G_GNUC_INTERNAL
 double rsvg_drawing_ctx_get_normalized_font_size (RsvgDrawingCtx * ctx);
 
 G_GNUC_INTERNAL
+cairo_matrix_t rsvg_drawing_ctx_get_current_state_affine (RsvgDrawingCtx *ctx);
+
+G_GNUC_INTERNAL
+void rsvg_drawing_ctx_set_current_state_affine (RsvgDrawingCtx *ctx, cairo_matrix_t *affine);
+
+G_GNUC_INTERNAL
 double _rsvg_css_accumulate_baseline_shift (RsvgState * state, RsvgDrawingCtx * ctx);
 
 /* Implemented in rust/src/length.rs */
diff --git a/rust/src/drawing_ctx.rs b/rust/src/drawing_ctx.rs
index e579a58..60d2900 100644
--- a/rust/src/drawing_ctx.rs
+++ b/rust/src/drawing_ctx.rs
@@ -35,6 +35,11 @@ extern "C" {
     fn rsvg_drawing_ctx_release_node (draw_ctx: *const RsvgDrawingCtx,
                                       node:     *mut RsvgNode);
 
+    fn rsvg_drawing_ctx_get_current_state_affine (draw_ctx: *const RsvgDrawingCtx) -> cairo::Matrix;
+
+    fn rsvg_drawing_ctx_set_current_state_affine (draw_ctx: *const RsvgDrawingCtx,
+                                                  affine:   *const cairo::Matrix);
+
     fn rsvg_state_reinherit_top (draw_ctx: *const RsvgDrawingCtx,
                                  state: *mut RsvgState,
                                  dominate: libc::c_int);
@@ -96,13 +101,11 @@ pub fn state_reinherit_top (draw_ctx: *const RsvgDrawingCtx,
 }
 
 pub fn render_path_builder (draw_ctx: *const RsvgDrawingCtx,
-                            builder: &RsvgPathBuilder)
-{
+                            builder: &RsvgPathBuilder) {
     unsafe { rsvg_render_path_builder (draw_ctx, builder); }
 }
 
-pub fn get_cairo_context (draw_ctx: *const RsvgDrawingCtx) -> cairo::Context
-{
+pub fn get_cairo_context (draw_ctx: *const RsvgDrawingCtx) -> cairo::Context {
     unsafe {
         let raw_cr = rsvg_cairo_get_cairo_context (draw_ctx);
 
@@ -111,3 +114,15 @@ pub fn get_cairo_context (draw_ctx: *const RsvgDrawingCtx) -> cairo::Context
         cr
     }
 }
+
+pub fn get_current_state_affine (draw_ctx: *const RsvgDrawingCtx) -> cairo::Matrix {
+    unsafe {
+        rsvg_drawing_ctx_get_current_state_affine (draw_ctx)
+    }
+}
+
+pub fn set_current_state_affine (draw_ctx: *const RsvgDrawingCtx, affine: cairo::Matrix) {
+    unsafe {
+        rsvg_drawing_ctx_set_current_state_affine (draw_ctx, &affine);
+    }
+}


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