]> git.mdlowis.com Git - proto/labwc.git/commitdiff
img: don't abort with non-ARGB32 PNG files
authortokyo4j <hrak1529@gmail.com>
Fri, 3 Jan 2025 12:58:35 +0000 (21:58 +0900)
committerHiroaki Yamamoto <hrak1529@gmail.com>
Sun, 5 Jan 2025 21:38:35 +0000 (06:38 +0900)
Cairo surfaces loaded with cairo_image_surface_create_from_png() are not
always ARGB32 format.

src/img/img-png.c

index 8824e925cb96118792ea8bf272db88ba9e502d1d..79aeafffc67a649e307f7409ef89719dc8262be6 100644 (file)
@@ -59,5 +59,22 @@ img_png_load(const char *filename)
                return NULL;
        }
 
-       return buffer_adopt_cairo_surface(image);
+       if (cairo_image_surface_get_format(image) == CAIRO_FORMAT_ARGB32) {
+               return buffer_adopt_cairo_surface(image);
+       } else {
+               /* Copy non-ARGB32 surface to ARGB32 buffer */
+               /* TODO: directly set non-ARGB32 surface in lab_data_buffer */
+               struct lab_data_buffer *buffer = buffer_create_cairo(
+                       cairo_image_surface_get_width(image),
+                       cairo_image_surface_get_height(image), 1);
+               cairo_t *cairo = cairo_create(buffer->surface);
+               cairo_set_source_surface(cairo, image, 0, 0);
+               cairo_paint(cairo);
+               cairo_surface_flush(cairo_get_target(cairo));
+               cairo_destroy(cairo);
+
+               cairo_surface_destroy(image);
+
+               return buffer;
+       }
 }