Add gdk_texture_new_from_bytes

Add this new api, and make gdk_texture_new_from_file
a wrapper around it.
This commit is contained in:
Matthias Clasen 2021-09-13 13:30:12 -04:00
parent 7c2be93a56
commit 1230bce133
2 changed files with 43 additions and 4 deletions

View File

@ -383,19 +383,55 @@ GdkTexture *
gdk_texture_new_from_file (GFile *file, gdk_texture_new_from_file (GFile *file,
GError **error) GError **error)
{ {
GBytes *bytes;
GdkTexture *texture; GdkTexture *texture;
GdkPixbuf *pixbuf;
GInputStream *stream;
g_return_val_if_fail (G_IS_FILE (file), NULL); g_return_val_if_fail (G_IS_FILE (file), NULL);
g_return_val_if_fail (error == NULL || *error == NULL, NULL); g_return_val_if_fail (error == NULL || *error == NULL, NULL);
stream = G_INPUT_STREAM (g_file_read (file, NULL, error)); bytes = g_file_load_bytes (file, NULL, NULL, error);
if (stream == NULL) if (bytes == NULL)
return 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); pixbuf = gdk_pixbuf_new_from_stream (stream, NULL, error);
g_object_unref (stream); g_object_unref (stream);
if (pixbuf == NULL) if (pixbuf == NULL)
return NULL; return NULL;

View File

@ -49,6 +49,9 @@ GdkTexture * gdk_texture_new_from_resource (const char
GDK_AVAILABLE_IN_ALL GDK_AVAILABLE_IN_ALL
GdkTexture * gdk_texture_new_from_file (GFile *file, GdkTexture * gdk_texture_new_from_file (GFile *file,
GError **error); GError **error);
GDK_AVAILABLE_IN_4_6
GdkTexture * gdk_texture_new_from_bytes (GBytes *bytes,
GError **error);
GDK_AVAILABLE_IN_ALL GDK_AVAILABLE_IN_ALL
int gdk_texture_get_width (GdkTexture *texture) G_GNUC_PURE; int gdk_texture_get_width (GdkTexture *texture) G_GNUC_PURE;