mirror of
https://gitlab.gnome.org/GNOME/gimp
synced 2024-10-18 13:53:46 +00:00
cb1f01a42b
It now uses rsvg_handle_get_geometry_for_layer() instead of rsvg_handle_get_(position|dimensions)_sub() which have been deprecated in favor of the new function which returns accurate (double) positioning and size. Back when I first made this build tool, librsvg had several blocking bugs to make icon extraction work properly. This seems to improve nicely. Nevertheless I still don't build this tool because after testing, more bugs remain and icon extraction is still not right. Just updating the code to undeprecate it but leave the build commented out for now. ;-( See librsvg#134, librsvg#128 and librsvg#250 for bug reports following these issues.
87 lines
2.5 KiB
C
87 lines
2.5 KiB
C
/* compute-svg-viewbox.c
|
|
* Copyright (C) 2016 Jehan
|
|
*
|
|
* This program is free software: you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License as published by
|
|
* the Free Software Foundation; either version 3 of the License, or
|
|
* (at your option) any later version.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
|
*/
|
|
|
|
#include <librsvg/rsvg.h>
|
|
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
|
|
int main (int argc, char **argv)
|
|
{
|
|
RsvgHandle *handle;
|
|
RsvgRectangle viewport = { 0.0, 0.0, 16.0, 16.0 };
|
|
RsvgRectangle out_ink_rect;
|
|
RsvgRectangle out_logical_rect;
|
|
|
|
gchar *endptr;
|
|
gchar *path;
|
|
gchar *id;
|
|
gint prev_x;
|
|
gint prev_y;
|
|
|
|
if (argc != 5)
|
|
{
|
|
fprintf (stderr, "Usage: compute-svg-viewbox path object_id x y\n");
|
|
return 1;
|
|
}
|
|
prev_x = strtol (argv[3], &endptr, 10);
|
|
if (endptr == argv[3])
|
|
{
|
|
fprintf (stderr, "Error: the third parameter must be an integer\n");
|
|
return 1;
|
|
}
|
|
prev_y = strtol (argv[4], &endptr, 10);
|
|
if (endptr == argv[4])
|
|
{
|
|
fprintf (stderr, "Error: the fourth parameter must be an integer\n");
|
|
return 1;
|
|
}
|
|
|
|
path = argv[1];
|
|
handle = rsvg_handle_new_from_file (path, NULL);
|
|
if (! handle)
|
|
{
|
|
fprintf (stderr, "Error: wrong path \"%s\".\n", path);
|
|
return 1;
|
|
}
|
|
|
|
id = g_strdup_printf ("#%s", argv[2]);
|
|
if (! rsvg_handle_has_sub (handle, id))
|
|
{
|
|
fprintf (stderr, "Error: the id \"%s\" does not exist.\n", id);
|
|
g_object_unref (handle);
|
|
g_free (id);
|
|
return 1;
|
|
}
|
|
|
|
rsvg_handle_get_geometry_for_layer (handle, id, &viewport, &out_ink_rect, &out_logical_rect, NULL);
|
|
|
|
if (out_ink_rect.width != out_ink_rect.height)
|
|
{
|
|
/* Right now, we are constraining all objects into square objects. */
|
|
fprintf (stderr, "WARNING: object \"%s\" has unexpected size %fx%f [pos: (%f, %f)].\n",
|
|
id, out_ink_rect.width, out_ink_rect.height,
|
|
out_ink_rect.x, out_ink_rect.y);
|
|
}
|
|
printf ("viewBox=\"%f %f %f %f\"",
|
|
out_ink_rect.x + prev_x, out_ink_rect.y + prev_y,
|
|
out_ink_rect.width, out_ink_rect.height);
|
|
|
|
g_object_unref (handle);
|
|
g_free (id);
|
|
return 0;
|
|
}
|