From b70d85ec145520ba3ebaa4c51921a2761bc0c7f0 Mon Sep 17 00:00:00 2001 From: Neil Muller Date: Mon, 3 Jun 2024 17:21:15 +0200 Subject: [PATCH] Correct for image orientation when loading image PEG and other image formats may include an EXIF orientation tag which indicates in what orientation (rotation and mirroring) the image should be displayed. libgdk-pixbuf does not correct for this when loading an image, but provides a function to apply the transform after the fact, which this commit uses. Pulled from https://github.com/swaywm/swaybg/pull/68 --- background-image.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/background-image.c b/background-image.c index fc2ca0d..572aceb 100644 --- a/background-image.c +++ b/background-image.c @@ -31,8 +31,12 @@ cairo_surface_t *load_background_image(const char *path) { err->message); return NULL; } - image = gdk_cairo_image_surface_create_from_pixbuf(pixbuf); + // Correct for embedded image orientation; typical images are not + // rotated and will be handled efficiently + GdkPixbuf *oriented = gdk_pixbuf_apply_embedded_orientation(pixbuf); g_object_unref(pixbuf); + image = gdk_cairo_image_surface_create_from_pixbuf(oriented); + g_object_unref(oriented); #else image = cairo_image_surface_create_from_png(path); #endif // HAVE_GDK_PIXBUF