[gtk/image-loading: 3/36] Add gdk_texture_new_from_bytes
- From: Matthias Clasen <matthiasc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk/image-loading: 3/36] Add gdk_texture_new_from_bytes
- Date: Tue, 14 Sep 2021 05:40:39 +0000 (UTC)
commit 693dd10ce85e638cae69887b5b41b8ce2eeacf9d
Author: Matthias Clasen <mclasen redhat com>
Date: Mon Sep 13 13:30:12 2021 -0400
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;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]