[librsvg: 9/13] use get_geometry_sub() internaly for get_position_sub() and get_dimension_sub()
- From: Federico Mena Quintero <federico src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [librsvg: 9/13] use get_geometry_sub() internaly for get_position_sub() and get_dimension_sub()
- Date: Fri, 30 Nov 2018 23:50:03 +0000 (UTC)
commit 144637244ebe241b1d78e937b1563a8ceba1c23b
Author: Julian Sparber <julian sparber net>
Date: Mon Nov 19 11:48:49 2018 +0200
use get_geometry_sub() internaly for get_position_sub() and get_dimension_sub()
librsvg/rsvg-handle.c | 78 +++++++++------------------------------------------
1 file changed, 13 insertions(+), 65 deletions(-)
---
diff --git a/librsvg/rsvg-handle.c b/librsvg/rsvg-handle.c
index 856a5cf9..833a7a35 100644
--- a/librsvg/rsvg-handle.c
+++ b/librsvg/rsvg-handle.c
@@ -1248,68 +1248,27 @@ get_node_geometry(RsvgHandle *handle, RsvgNode *node, cairo_rectangle_t *ink_rec
gboolean
rsvg_handle_get_dimensions_sub (RsvgHandle * handle, RsvgDimensionData * dimension_data, const char *id)
{
- RsvgNode *root = NULL;
- RsvgNode *node;
- gboolean has_size;
- int root_width, root_height;
- gboolean res = FALSE;
+ cairo_rectangle_t ink_r;
g_return_val_if_fail (RSVG_IS_HANDLE (handle), FALSE);
g_return_val_if_fail (dimension_data, FALSE);
+ memset (&ink_r, 0, sizeof (cairo_rectangle_t));
memset (dimension_data, 0, sizeof (RsvgDimensionData));
- if (handle->priv->tree == NULL)
+ if (!rsvg_handle_get_geometry_sub (handle, &ink_r, NULL, id)) {
return FALSE;
-
- root = rsvg_tree_get_root (handle->priv->tree);
-
- if (id && *id) {
- node = rsvg_defs_lookup (handle->priv->defs, handle, id);
-
- if (node && rsvg_tree_is_root (handle->priv->tree, node))
- id = NULL;
- } else {
- node = root;
- }
-
- if (!node && id) {
- goto out;
- }
-
- has_size = rsvg_node_svg_get_size (root,
- handle->priv->dpi_x, handle->priv->dpi_y,
- &root_width, &root_height);
-
- if (id || !has_size) {
- cairo_rectangle_t ink_rect;
- cairo_rectangle_t logical_rect;
-
- if (!get_node_geometry (handle, node, &ink_rect, &logical_rect)) {
- goto out;
- }
-
- dimension_data->width = ink_rect.width;
- dimension_data->height = ink_rect.height;
- } else {
- dimension_data->width = root_width;
- dimension_data->height = root_height;
}
+ dimension_data->width = ink_r.width;
+ dimension_data->height = ink_r.height;
dimension_data->em = dimension_data->width;
dimension_data->ex = dimension_data->height;
if (handle->priv->size_func)
(*handle->priv->size_func) (&dimension_data->width, &dimension_data->height,
handle->priv->user_data);
-
- res = TRUE;
-
-out:
-
- g_clear_pointer (&root, rsvg_node_unref);
-
- return res;
+ return TRUE;
}
/**
@@ -1349,7 +1308,7 @@ rsvg_handle_get_geometry_sub (RsvgHandle * handle, cairo_rectangle_t * ink_rect,
root = rsvg_tree_get_root (handle->priv->tree);
if (id && *id) {
- node = rsvg_defs_lookup (handle->priv->defs, id);
+ node = rsvg_defs_lookup (handle->priv->defs, handle, id);
if (node && rsvg_tree_is_root (handle->priv->tree, node))
id = NULL;
@@ -1414,8 +1373,7 @@ out:
gboolean
rsvg_handle_get_position_sub (RsvgHandle * handle, RsvgPositionData * position_data, const char *id)
{
- RsvgNode *node;
- cairo_rectangle_t ink_rect, logical_rect;
+ cairo_rectangle_t ink_r;
int width, height;
g_return_val_if_fail (RSVG_IS_HANDLE (handle), FALSE);
@@ -1423,28 +1381,18 @@ rsvg_handle_get_position_sub (RsvgHandle * handle, RsvgPositionData * position_d
memset (position_data, 0, sizeof (*position_data));
- if (handle->priv->tree == NULL)
- return FALSE;
-
/* Short-cut when no id is given. */
if (NULL == id || '\0' == *id)
return TRUE;
- node = rsvg_defs_lookup (handle->priv->defs, handle, id);
- if (!node)
- return FALSE;
-
- if (rsvg_tree_is_root (handle->priv->tree, node))
- return TRUE;
-
- if (!get_node_geometry (handle, node, &ink_rect, &logical_rect))
+ if (!rsvg_handle_get_geometry_sub (handle, &ink_r, NULL, id))
return FALSE;
- position_data->x = ink_rect.x;
- position_data->y = ink_rect.y;
+ position_data->x = ink_r.x;
+ position_data->y = ink_r.y;
- width = ink_rect.width;
- height = ink_rect.height;
+ width = ink_r.width;
+ height = ink_r.height;
if (handle->priv->size_func)
(*handle->priv->size_func) (&width, &height, handle->priv->user_data);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]