From 1230bce1337cb940851088a902e752ceeb8b10e2 Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Mon, 13 Sep 2021 13:30:12 -0400 Subject: [PATCH] Add gdk_texture_new_from_bytes Add this new api, and make gdk_texture_new_from_file a wrapper around it. --- gdk/gdktexture.c | 44 ++++++++++++++++++++++++++++++++++++++++---- gdk/gdktexture.h | 3 +++ 2 files changed, 43 insertions(+), 4 deletions(-) diff --git a/gdk/gdktexture.c b/gdk/gdktexture.c index 7b055238fd..ee7570e7e7 100644 --- a/gdk/gdktexture.c +++ b/gdk/gdktexture.c @@ -383,19 +383,55 @@ GdkTexture * gdk_texture_new_from_file (GFile *file, GError **error) { + GBytes *bytes; GdkTexture *texture; - GdkPixbuf *pixbuf; - GInputStream *stream; g_return_val_if_fail (G_IS_FILE (file), NULL); g_return_val_if_fail (error == NULL || *error == NULL, NULL); - stream = G_INPUT_STREAM (g_file_read (file, NULL, error)); - if (stream == NULL) + bytes = g_file_load_bytes (file, NULL, NULL, error); + if (bytes == NULL) return NULL; + texture = gdk_texture_new_from_bytes (bytes, error); + + g_bytes_unref (bytes); + + return texture; +} + + +/** + * gdk_texture_new_from_bytes: + * @bytes: a `GBytes` containing the data to load + * @error: Return location for an error + * + * Creates a new texture by loading an image from memory, + * + * The file format is detected automatically. The supported formats + * are PNG and JPEG, though more formats might be available. + * + * If %NULL is returned, then @error will be set. + * + * Return value: A newly-created `GdkTexture` + * + * Since: 4.6 + */ +GdkTexture * +gdk_texture_new_from_bytes (GBytes *bytes, + GError **error) +{ + GInputStream *stream; + GdkPixbuf *pixbuf; + GdkTexture *texture; + + g_return_val_if_fail (bytes != NULL, NULL); + g_return_val_if_fail (error == NULL || *error == NULL, NULL); + + stream = g_memory_input_stream_new_from_bytes (bytes); pixbuf = gdk_pixbuf_new_from_stream (stream, NULL, error); g_object_unref (stream); + if (pixbuf == NULL) return NULL; diff --git a/gdk/gdktexture.h b/gdk/gdktexture.h index 9e3b7a93fa..7cccdb5928 100644 --- a/gdk/gdktexture.h +++ b/gdk/gdktexture.h @@ -49,6 +49,9 @@ GdkTexture * gdk_texture_new_from_resource (const char GDK_AVAILABLE_IN_ALL GdkTexture * gdk_texture_new_from_file (GFile *file, GError **error); +GDK_AVAILABLE_IN_4_6 +GdkTexture * gdk_texture_new_from_bytes (GBytes *bytes, + GError **error); GDK_AVAILABLE_IN_ALL int gdk_texture_get_width (GdkTexture *texture) G_GNUC_PURE;