[librsvg: 7/13] From the Rust code, return the lack of bounding boxes as 0-sized Cairo rectangles
- From: Federico Mena Quintero <federico src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [librsvg: 7/13] From the Rust code, return the lack of bounding boxes as 0-sized Cairo rectangles
- Date: Fri, 30 Nov 2018 23:49:53 +0000 (UTC)
commit 8e44a64a08fdb0984c6fb41374bff20abb24e576
Author: Federico Mena Quintero <federico gnome org>
Date: Sun Nov 18 07:12:49 2018 -0600
From the Rust code, return the lack of bounding boxes as 0-sized Cairo rectangles
librsvg/rsvg-handle.c | 3 +-
librsvg/rsvg-private.h | 2 +-
rsvg_internals/src/drawing_ctx.rs | 58 ++++++++++++++++++++++-----------------
3 files changed, 36 insertions(+), 27 deletions(-)
---
diff --git a/librsvg/rsvg-handle.c b/librsvg/rsvg-handle.c
index 5e78bcd3..856a5cf9 100644
--- a/librsvg/rsvg-handle.c
+++ b/librsvg/rsvg-handle.c
@@ -1220,9 +1220,10 @@ get_node_geometry(RsvgHandle *handle, RsvgNode *node, cairo_rectangle_t *ink_rec
rsvg_drawing_ctx_add_node_and_ancestors_to_stack (draw, node);
rsvg_tree_cascade (handle->priv->tree);
+ /* FIXME: expose this as a RenderingError in the public API */
res = rsvg_drawing_ctx_draw_node_from_stack (draw, handle->priv->tree);
if (res) {
- res = rsvg_drawing_ctx_get_geometry (draw, ink_rect, logical_rect);
+ rsvg_drawing_ctx_get_geometry (draw, ink_rect, logical_rect);
}
rsvg_drawing_ctx_free (draw);
diff --git a/librsvg/rsvg-private.h b/librsvg/rsvg-private.h
index e201ab67..296b8c1a 100644
--- a/librsvg/rsvg-private.h
+++ b/librsvg/rsvg-private.h
@@ -223,7 +223,7 @@ gboolean rsvg_drawing_ctx_draw_node_from_stack (RsvgDrawingCtx *ctx, RsvgTree *t
/* Defined in rsvg_internals/src/drawing_ctx.rs */
G_GNUC_INTERNAL
-gboolean rsvg_drawing_ctx_get_geometry (RsvgDrawingCtx *ctx, cairo_rectangle_t *ink_rect, cairo_rectangle_t
*logical_rect);
+void rsvg_drawing_ctx_get_geometry (RsvgDrawingCtx *ctx, cairo_rectangle_t *ink_rect, cairo_rectangle_t
*logical_rect);
/* Implemented in rust/src/node.rs */
G_GNUC_INTERNAL
diff --git a/rsvg_internals/src/drawing_ctx.rs b/rsvg_internals/src/drawing_ctx.rs
index e183abd7..a39696cb 100644
--- a/rsvg_internals/src/drawing_ctx.rs
+++ b/rsvg_internals/src/drawing_ctx.rs
@@ -1094,41 +1094,49 @@ pub extern "C" fn rsvg_drawing_ctx_add_node_and_ancestors_to_stack(
}
#[no_mangle]
-pub extern "C" fn rsvg_drawing_ctx_get_geometry(
+pub unsafe extern "C" fn rsvg_drawing_ctx_get_geometry(
raw_draw_ctx: *const RsvgDrawingCtx,
ink_rect: *mut cairo_sys::cairo_rectangle_t,
logical_rect: *mut cairo_sys::cairo_rectangle_t,
-) -> glib_sys::gboolean {
+) {
assert!(!raw_draw_ctx.is_null());
- let draw_ctx = unsafe { &mut *(raw_draw_ctx as *mut DrawingCtx<'_>) };
+ let draw_ctx = &mut *(raw_draw_ctx as *mut DrawingCtx<'_>);
assert!(!ink_rect.is_null());
assert!(!logical_rect.is_null());
- let mut res = match draw_ctx.get_bbox().ink_rect {
- Some(r) => unsafe {
- (*ink_rect).x = r.x;
- (*ink_rect).y = r.y;
- (*ink_rect).width = r.width;
- (*ink_rect).height = r.height;
- true
- },
- _ => false,
- };
+ let ink_rect: &mut cairo::Rectangle = &mut *ink_rect;
+ let logical_rect: &mut cairo::Rectangle = &mut *logical_rect;
- res = res
- && match draw_ctx.get_bbox().rect {
- Some(r) => unsafe {
- (*logical_rect).x = r.x;
- (*logical_rect).y = r.y;
- (*logical_rect).width = r.width;
- (*logical_rect).height = r.height;
- true
- },
- _ => false,
- };
+ match draw_ctx.get_bbox().ink_rect {
+ Some(r) => {
+ ink_rect.x = r.x;
+ ink_rect.y = r.y;
+ ink_rect.width = r.width;
+ ink_rect.height = r.height;
+ }
+ None => {
+ ink_rect.x = 0.0;
+ ink_rect.y = 0.0;
+ ink_rect.width = 0.0;
+ ink_rect.height = 0.0;
+ }
+ }
- res.to_glib()
+ match draw_ctx.get_bbox().rect {
+ Some(r) => {
+ logical_rect.x = r.x;
+ logical_rect.y = r.y;
+ logical_rect.width = r.width;
+ logical_rect.height = r.height;
+ }
+ None => {
+ logical_rect.x = 0.0;
+ logical_rect.y = 0.0;
+ logical_rect.width = 0.0;
+ logical_rect.height = 0.0;
+ }
+ }
}
pub struct AcquiredNode(Rc<RefCell<Vec<RsvgNode>>>, RsvgNode);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]