From 7949aaabb7fcafab3aa683330437737783f22665 Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Sun, 12 Sep 2021 09:24:59 -0400 Subject: [PATCH] Save pngs without cairo Use our own loader for pngs, which will allow us to save e.g. 16-bit data in the future. --- gdk/gdktexture.c | 26 +++++++------------------- 1 file changed, 7 insertions(+), 19 deletions(-) diff --git a/gdk/gdktexture.c b/gdk/gdktexture.c index 8d2d1d16ca..973a6f923a 100644 --- a/gdk/gdktexture.c +++ b/gdk/gdktexture.c @@ -698,30 +698,18 @@ gboolean gdk_texture_save_to_png (GdkTexture *texture, const char *filename) { - cairo_surface_t *surface; - cairo_status_t status; + GBytes *bytes; gboolean result; g_return_val_if_fail (GDK_IS_TEXTURE (texture), FALSE); g_return_val_if_fail (filename != NULL, FALSE); - surface = cairo_image_surface_create (CAIRO_FORMAT_ARGB32, - gdk_texture_get_width (texture), - gdk_texture_get_height (texture)); - gdk_texture_download (texture, - cairo_image_surface_get_data (surface), - cairo_image_surface_get_stride (surface)); - cairo_surface_mark_dirty (surface); - - status = cairo_surface_write_to_png (surface, filename); - - if (status != CAIRO_STATUS_SUCCESS || - cairo_surface_status (surface) != CAIRO_STATUS_SUCCESS) - result = FALSE; - else - result = TRUE; - - cairo_surface_destroy (surface); + bytes = gdk_save_png (texture); + result = g_file_set_contents (filename, + g_bytes_get_data (bytes, NULL), + g_bytes_get_size (bytes), + NULL); + g_bytes_unref (bytes); return result; }