diff options
author | Benjamin Otte <otte@redhat.com> | 2014-05-16 04:06:23 +0200 |
---|---|---|
committer | Benjamin Otte <otte@redhat.com> | 2014-05-16 04:13:39 +0200 |
commit | 271ef198bf0c7fd569136f9c72e2806d529cd9e8 (patch) | |
tree | 7b8b540da12619c0d740123fd6946dc4b2be08c8 /gtk/gtkcssimageicontheme.c | |
parent | 96c476b6a0bbeac07ce70cee77f323f13dd1c520 (diff) | |
download | gtk+-271ef198bf0c7fd569136f9c72e2806d529cd9e8.tar.gz |
cssimage: Implement symbolic coloring for -gtk-icontheme()
Diffstat (limited to 'gtk/gtkcssimageicontheme.c')
-rw-r--r-- | gtk/gtkcssimageicontheme.c | 30 |
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); } |