summaryrefslogtreecommitdiff
path: root/src/image.c
diff options
context:
space:
mode:
authorPaul Eggert <eggert@cs.ucla.edu>2021-11-05 11:51:46 -0700
committerPaul Eggert <eggert@cs.ucla.edu>2021-11-05 11:53:17 -0700
commit133026c362eb27191d992fbf35727550804bfc96 (patch)
tree0a8590a4398e615960955dc1309ad88480f399cc /src/image.c
parentc1865384d736cf290971e049a9d2f7869c7396da (diff)
downloademacs-133026c362eb27191d992fbf35727550804bfc96.tar.gz
rsvg_handle_get_dimensions is deprecated in 2.52.0
In Bug#44655#32 (2020-11-19) it was reported that rsvg_handle_get_dimensions was not deprecated. However, it became deprecated in librsvg 2.52.0 (2021-09-15), and because of this Emacs builds with --enable-gcc-warnings fail in Fedora 35 (2025-11-02) with the diagnostic “‘rsvg_handle_get_dimensions’ is deprecated: Use 'rsvg_handle_get_intrinsic_size_in_pixels' instead [-Werror=deprecated-declarations]”. * src/image.c (rsvg_handle_get_dimensions): Define as a DLL function only if < librsvg 2.46.0, since it’s not used in 2.46.0 or later. (svg_load_image): Use rsvg_handle_get_dimensions only if librsvg < 2.46.0, since it isn’t needed if >= 2.46.0.
Diffstat (limited to 'src/image.c')
-rw-r--r--src/image.c34
1 files changed, 15 insertions, 19 deletions
diff --git a/src/image.c b/src/image.c
index 102f3a1c3a0..da6cbba74da 100644
--- a/src/image.c
+++ b/src/image.c
@@ -9974,14 +9974,15 @@ DEF_DLL_FN (void, rsvg_handle_get_intrinsic_dimensions,
DEF_DLL_FN (gboolean, rsvg_handle_get_geometry_for_layer,
(RsvgHandle *, const char *, const RsvgRectangle *,
RsvgRectangle *, RsvgRectangle *, GError **));
+# else
+DEF_DLL_FN (void, rsvg_handle_get_dimensions,
+ (RsvgHandle *, RsvgDimensionData *));
# endif
# if LIBRSVG_CHECK_VERSION (2, 48, 0)
DEF_DLL_FN (gboolean, rsvg_handle_set_stylesheet,
(RsvgHandle *, const guint8 *, gsize, GError **));
# endif
-DEF_DLL_FN (void, rsvg_handle_get_dimensions,
- (RsvgHandle *, RsvgDimensionData *));
DEF_DLL_FN (GdkPixbuf *, rsvg_handle_get_pixbuf, (RsvgHandle *));
DEF_DLL_FN (int, gdk_pixbuf_get_width, (const GdkPixbuf *));
DEF_DLL_FN (int, gdk_pixbuf_get_height, (const GdkPixbuf *));
@@ -10032,11 +10033,12 @@ init_svg_functions (void)
#if LIBRSVG_CHECK_VERSION (2, 46, 0)
LOAD_DLL_FN (library, rsvg_handle_get_intrinsic_dimensions);
LOAD_DLL_FN (library, rsvg_handle_get_geometry_for_layer);
+#else
+ LOAD_DLL_FN (library, rsvg_handle_get_dimensions);
#endif
#if LIBRSVG_CHECK_VERSION (2, 48, 0)
LOAD_DLL_FN (library, rsvg_handle_set_stylesheet);
#endif
- LOAD_DLL_FN (library, rsvg_handle_get_dimensions);
LOAD_DLL_FN (library, rsvg_handle_get_pixbuf);
LOAD_DLL_FN (gdklib, gdk_pixbuf_get_width);
@@ -10074,8 +10076,9 @@ init_svg_functions (void)
# if LIBRSVG_CHECK_VERSION (2, 46, 0)
# undef rsvg_handle_get_intrinsic_dimensions
# undef rsvg_handle_get_geometry_for_layer
+# else
+# undef rsvg_handle_get_dimensions
# endif
-# undef rsvg_handle_get_dimensions
# if LIBRSVG_CHECK_VERSION (2, 48, 0)
# undef rsvg_handle_set_stylesheet
# endif
@@ -10110,8 +10113,9 @@ init_svg_functions (void)
fn_rsvg_handle_get_intrinsic_dimensions
# define rsvg_handle_get_geometry_for_layer \
fn_rsvg_handle_get_geometry_for_layer
+# else
+# define rsvg_handle_get_dimensions fn_rsvg_handle_get_dimensions
# endif
-# define rsvg_handle_get_dimensions fn_rsvg_handle_get_dimensions
# if LIBRSVG_CHECK_VERSION (2, 48, 0)
# define rsvg_handle_set_stylesheet fn_rsvg_handle_set_stylesheet
# endif
@@ -10386,21 +10390,13 @@ svg_load_image (struct frame *f, struct image *img, char *contents,
viewbox_width = viewbox.x + viewbox.width;
viewbox_height = viewbox.y + viewbox.height;
}
-
- if (viewbox_width == 0 || viewbox_height == 0)
+#else
+ /* In librsvg before 2.46.0, guess the viewbox from the image dimensions. */
+ RsvgDimensionData dimension_data;
+ rsvg_handle_get_dimensions (rsvg_handle, &dimension_data);
+ viewbox_width = dimension_data.width;
+ viewbox_height = dimension_data.height;
#endif
- {
- /* The functions used above to get the geometry of the visible
- area of the SVG are only available in librsvg 2.46 and above,
- so in certain circumstances this code path can result in some
- parts of the SVG being cropped. */
- RsvgDimensionData dimension_data;
-
- rsvg_handle_get_dimensions (rsvg_handle, &dimension_data);
-
- viewbox_width = dimension_data.width;
- viewbox_height = dimension_data.height;
- }
compute_image_size (viewbox_width, viewbox_height, img,
&width, &height);