summaryrefslogtreecommitdiff
path: root/gtk/gtkcssimageicontheme.c
diff options
context:
space:
mode:
authorBenjamin Otte <otte@redhat.com>2014-05-16 04:06:23 +0200
committerBenjamin Otte <otte@redhat.com>2014-05-16 04:13:39 +0200
commit271ef198bf0c7fd569136f9c72e2806d529cd9e8 (patch)
tree7b8b540da12619c0d740123fd6946dc4b2be08c8 /gtk/gtkcssimageicontheme.c
parent96c476b6a0bbeac07ce70cee77f323f13dd1c520 (diff)
downloadgtk+-271ef198bf0c7fd569136f9c72e2806d529cd9e8.tar.gz
cssimage: Implement symbolic coloring for -gtk-icontheme()
Diffstat (limited to 'gtk/gtkcssimageicontheme.c')
-rw-r--r--gtk/gtkcssimageicontheme.c30
1 files changed, 23 insertions, 7 deletions
diff --git a/gtk/gtkcssimageicontheme.c b/gtk/gtkcssimageicontheme.c
index a681fe2675..91cfb6d91e 100644
--- a/gtk/gtkcssimageicontheme.c
+++ b/gtk/gtkcssimageicontheme.c
@@ -23,6 +23,7 @@
#include <math.h>
+#include "gtkcssrgbavalueprivate.h"
#include "gtksettingsprivate.h"
#include "gtkstyleproviderprivate.h"
@@ -43,6 +44,7 @@ gtk_css_image_icon_theme_draw (GtkCssImage *image,
{
GtkCssImageIconTheme *icon_theme = GTK_CSS_IMAGE_ICON_THEME (image);
GError *error = NULL;
+ GtkIconInfo *icon_info;
GdkPixbuf *pixbuf;
gint size;
@@ -50,12 +52,22 @@ gtk_css_image_icon_theme_draw (GtkCssImage *image,
if (size <= 0)
return;
- pixbuf = gtk_icon_theme_load_icon_for_scale (icon_theme->icon_theme,
- icon_theme->name,
- size,
- icon_theme->scale,
- GTK_ICON_LOOKUP_USE_BUILTIN,
- &error);
+ icon_info = gtk_icon_theme_lookup_icon_for_scale (icon_theme->icon_theme,
+ icon_theme->name,
+ size,
+ icon_theme->scale,
+ GTK_ICON_LOOKUP_USE_BUILTIN);
+ if (icon_info == NULL)
+ {
+ /* XXX: render missing icon image here? */
+ return;
+ }
+
+ pixbuf = gtk_icon_info_load_symbolic (icon_info,
+ &icon_theme->color,
+ NULL, NULL, NULL,
+ NULL,
+ &error);
if (pixbuf == NULL)
{
/* XXX: render missing icon image here? */
@@ -70,12 +82,13 @@ gtk_css_image_icon_theme_draw (GtkCssImage *image,
cairo_paint (cr);
g_object_unref (pixbuf);
+ g_object_unref (icon_info);
}
static gboolean
gtk_css_image_icon_theme_parse (GtkCssImage *image,
- GtkCssParser *parser)
+ GtkCssParser *parser)
{
GtkCssImageIconTheme *icon_theme = GTK_CSS_IMAGE_ICON_THEME (image);
@@ -133,6 +146,9 @@ gtk_css_image_icon_theme_compute (GtkCssImage *image,
copy->name = g_strdup (icon_theme->name);
copy->icon_theme = gtk_icon_theme_get_for_screen (screen);
copy->scale = scale;
+ copy->color = *_gtk_css_rgba_value_get_rgba (_gtk_css_computed_values_get_value (values, GTK_CSS_PROPERTY_COLOR));
+
+ *dependencies = GTK_CSS_DEPENDS_ON_COLOR;
return GTK_CSS_IMAGE (copy);
}