From: Alexander Larsson Date: Tue, 28 Jan 2020 07:34:14 +0000 (+0100) Subject: icon theme: Add gtk_icon_info_download_texture() function X-Git-Tag: archive/raspbian/4.4.1+ds1-2+rpi1^2~18^2~20^2~126^2~32 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=884e06ad372d6147145d83327d6aa56d01e851f9;p=gtk4.git icon theme: Add gtk_icon_info_download_texture() function This returns a reference to the texture (if possible) and can be used to get access to the pixels of the icon. --- diff --git a/gtk/gtkicontheme.c b/gtk/gtkicontheme.c index 01da64cc8f..768889bea1 100644 --- a/gtk/gtkicontheme.c +++ b/gtk/gtkicontheme.c @@ -3832,20 +3832,36 @@ icon_info_ensure_scale_and_texture__locked (GtkIconInfo *icon_info) return TRUE; } -static GdkTexture * -icon_info_get_texture (GtkIconInfo *icon_info) +GdkTexture * +gtk_icon_info_download_texture (GtkIconInfo *self, + GError **error) { GdkTexture *texture = NULL; - g_mutex_lock (&icon_info->cache_lock); + g_mutex_lock (&self->cache_lock); - if (!icon_info->texture) - icon_info_ensure_scale_and_texture__locked (icon_info); + if (!self->texture) + icon_info_ensure_scale_and_texture__locked (self); - if (icon_info->texture) - texture = g_object_ref (icon_info->texture); + if (self->texture) + texture = g_object_ref (self->texture); + else + { + if (self->load_error) + { + if (error) + *error = g_error_copy (self->load_error); + } + else + { + g_set_error_literal (error, + GTK_ICON_THEME_ERROR, + GTK_ICON_THEME_NOT_FOUND, + _("Failed to load icon")); + } + } - g_mutex_unlock (&icon_info->cache_lock); + g_mutex_unlock (&self->cache_lock); return texture; } @@ -3859,7 +3875,7 @@ icon_info_paintable_snapshot (GdkPaintable *paintable, GtkIconInfo *icon_info = GTK_ICON_INFO (paintable); GdkTexture *texture; - texture = icon_info_get_texture (icon_info); + texture = gtk_icon_info_download_texture (icon_info, NULL); if (texture) { if (icon_info->desired_scale != 1) @@ -3890,7 +3906,7 @@ gtk_icon_info_snapshot_with_colors (GtkIconInfo *icon_info, { GdkTexture *texture; - texture = icon_info_get_texture (icon_info); + texture = gtk_icon_info_download_texture (icon_info, NULL); if (texture) { gboolean symbolic = gtk_icon_info_is_symbolic (icon_info); diff --git a/gtk/gtkicontheme.h b/gtk/gtkicontheme.h index 484d329439..dee4b114ca 100644 --- a/gtk/gtkicontheme.h +++ b/gtk/gtkicontheme.h @@ -213,6 +213,11 @@ GDK_AVAILABLE_IN_ALL const gchar * gtk_icon_info_get_filename (GtkIconInfo *self); GDK_AVAILABLE_IN_ALL gboolean gtk_icon_info_is_symbolic (GtkIconInfo *self); +GDK_AVAILABLE_IN_ALL +GdkTexture * gtk_icon_info_download_texture (GtkIconInfo *self, + GError **error); + +GDK_AVAILABLE_IN_ALL void gtk_icon_info_snapshot_with_colors (GtkIconInfo *icon_info, GdkSnapshot *snapshot, double width,