[librsvg: 1/2] rsvg-handle: take viewport as pointer for get_geometry_for_element()



commit 740f0412d2ff661597161dc1248f472301fe3498
Author: Marc-André Lureau <marcandre lureau redhat com>
Date:   Thu May 9 17:25:55 2019 +0200

    rsvg-handle: take viewport as pointer for get_geometry_for_element()
    
    Vala has trouble with mixing out arguments and stack values.
    RsvgRectangle viewport can be passed as const pointer instead.
    
    Apparently the API isn't fixed yet, let's propose a change while it is
    still time.
    
    Related to:
    https://gitlab.gnome.org/GNOME/librsvg/issues/454
    
    Signed-off-by: Marc-André Lureau <marcandre lureau redhat com>

 librsvg/rsvg-handle.c       | 5 +++--
 librsvg/rsvg.h              | 2 +-
 rsvg_internals/src/c_api.rs | 4 ++--
 tests/api.c                 | 4 ++--
 4 files changed, 8 insertions(+), 7 deletions(-)
---
diff --git a/librsvg/rsvg-handle.c b/librsvg/rsvg-handle.c
index a5b66f99..3aa788df 100644
--- a/librsvg/rsvg-handle.c
+++ b/librsvg/rsvg-handle.c
@@ -336,7 +336,7 @@ extern void rsvg_rust_handle_get_intrinsic_dimensions (RsvgHandle *handle,
                                                        RsvgRectangle *out_viewbox);
 extern gboolean rsvg_rust_handle_get_geometry_for_element (RsvgHandle     *handle,
                                                            const char     *id,
-                                                           RsvgRectangle   viewport,
+                                                           const RsvgRectangle *viewport,
                                                            RsvgRectangle  *out_ink_rect,
                                                            RsvgRectangle  *out_logical_rect,
                                                            GError        **error);
@@ -1113,12 +1113,13 @@ rsvg_handle_get_intrinsic_dimensions (RsvgHandle *handle,
 gboolean
 rsvg_handle_get_geometry_for_element (RsvgHandle     *handle,
                                       const char     *id,
-                                      RsvgRectangle   viewport,
+                                      const RsvgRectangle *viewport,
                                       RsvgRectangle  *out_ink_rect,
                                       RsvgRectangle  *out_logical_rect,
                                       GError        **error)
 {
     g_return_val_if_fail (RSVG_IS_HANDLE (handle), FALSE);
+    g_return_val_if_fail (viewport != NULL, FALSE);
     g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
 
     return rsvg_rust_handle_get_geometry_for_element (handle,
diff --git a/librsvg/rsvg.h b/librsvg/rsvg.h
index f5e4252a..1b48e9f6 100644
--- a/librsvg/rsvg.h
+++ b/librsvg/rsvg.h
@@ -264,7 +264,7 @@ void rsvg_handle_get_intrinsic_dimensions (RsvgHandle *handle,
 
 gboolean rsvg_handle_get_geometry_for_element (RsvgHandle     *handle,
                                                const char     *id,
-                                               RsvgRectangle   viewport,
+                                               const RsvgRectangle *viewport,
                                                RsvgRectangle  *out_ink_rect,
                                                RsvgRectangle  *out_logical_rect,
                                                GError        **error);
diff --git a/rsvg_internals/src/c_api.rs b/rsvg_internals/src/c_api.rs
index bc0fcbe8..062c2f12 100644
--- a/rsvg_internals/src/c_api.rs
+++ b/rsvg_internals/src/c_api.rs
@@ -1246,7 +1246,7 @@ pub unsafe extern "C" fn rsvg_rust_handle_get_intrinsic_dimensions(
 pub unsafe extern "C" fn rsvg_rust_handle_get_geometry_for_element(
     handle: *mut RsvgHandle,
     id: *const libc::c_char,
-    viewport: RsvgRectangle,
+    viewport: *const RsvgRectangle,
     out_ink_rect: *mut RsvgRectangle,
     out_logical_rect: *mut RsvgRectangle,
     error: *mut *mut glib_sys::GError,
@@ -1255,7 +1255,7 @@ pub unsafe extern "C" fn rsvg_rust_handle_get_geometry_for_element(
 
     let id: Option<String> = from_glib_none(id);
 
-    match rhandle.get_geometry_for_element(id.as_ref().map(String::as_str), &viewport.into()) {
+    match rhandle.get_geometry_for_element(id.as_ref().map(String::as_str), &(*viewport).into()) {
         Ok((ink_rect, logical_rect)) => {
             if !out_ink_rect.is_null() {
                 *out_ink_rect = ink_rect;
diff --git a/tests/api.c b/tests/api.c
index 8a7f4b5f..c2b85c1c 100644
--- a/tests/api.c
+++ b/tests/api.c
@@ -959,14 +959,14 @@ get_geometry_for_element (void)
     RsvgRectangle ink_rect;
     RsvgRectangle logical_rect;
 
-    g_assert (!rsvg_handle_get_geometry_for_element (handle, "#nonexistent", viewport,
+    g_assert (!rsvg_handle_get_geometry_for_element (handle, "#nonexistent", &viewport,
                                                      &ink_rect, &logical_rect, &error));
     g_assert (error != NULL);
 
     g_error_free (error);
     error = NULL;
 
-    g_assert (rsvg_handle_get_geometry_for_element (handle, "#two", viewport,
+    g_assert (rsvg_handle_get_geometry_for_element (handle, "#two", &viewport,
                                                     &ink_rect, &logical_rect, &error));
     g_assert (error == NULL);
 


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