[librsvg] draw_ctx.rs: New functions to get/set the current state's affine
- From: Federico Mena Quintero <federico src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [librsvg] draw_ctx.rs: New functions to get/set the current state's affine
- Date: Thu, 2 Feb 2017 04:01:15 +0000 (UTC)
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]