From ce0835e539392c3d51df6bbd673f60db7532b159 Mon Sep 17 00:00:00 2001 From: Benjamin Otte Date: Mon, 12 May 2014 03:16:07 +0200 Subject: [PATCH] themingengine: Draw "icon-shadow" on icons --- gtk/gtkcssshadowsvalue.c | 8 ++++++++ gtk/gtkcssshadowsvalueprivate.h | 2 ++ gtk/gtkthemingengine.c | 11 +++++++++++ 3 files changed, 21 insertions(+) diff --git a/gtk/gtkcssshadowsvalue.c b/gtk/gtkcssshadowsvalue.c index eb32471cec..6ff7ef0320 100644 --- a/gtk/gtkcssshadowsvalue.c +++ b/gtk/gtkcssshadowsvalue.c @@ -241,6 +241,14 @@ _gtk_css_shadows_value_parse (GtkCssParser *parser) return result; } +gboolean +_gtk_css_shadows_value_is_none (const GtkCssValue *shadows) +{ + g_return_val_if_fail (shadows->class == >K_CSS_VALUE_SHADOWS, TRUE); + + return shadows->len == 0; +} + void _gtk_css_shadows_value_paint_layout (const GtkCssValue *shadows, cairo_t *cr, diff --git a/gtk/gtkcssshadowsvalueprivate.h b/gtk/gtkcssshadowsvalueprivate.h index 2b227bd5a8..5f2bdbbcdd 100644 --- a/gtk/gtkcssshadowsvalueprivate.h +++ b/gtk/gtkcssshadowsvalueprivate.h @@ -33,6 +33,8 @@ G_BEGIN_DECLS GtkCssValue * _gtk_css_shadows_value_new_none (void); GtkCssValue * _gtk_css_shadows_value_parse (GtkCssParser *parser); +gboolean _gtk_css_shadows_value_is_none (const GtkCssValue *shadows); + void _gtk_css_shadows_value_paint_layout (const GtkCssValue *shadows, cairo_t *cr, PangoLayout *layout); diff --git a/gtk/gtkthemingengine.c b/gtk/gtkthemingengine.c index 910d7b6f32..f85babab9d 100644 --- a/gtk/gtkthemingengine.c +++ b/gtk/gtkthemingengine.c @@ -1031,12 +1031,15 @@ render_icon_image (GtkThemingEngine *engine, double width, double height) { + const GtkCssValue *shadows; GtkCssImage *image; image = _gtk_css_image_value_get_image (_gtk_theming_engine_peek_property (engine, GTK_CSS_PROPERTY_ICON_SOURCE)); if (image == NULL) return FALSE; + shadows = _gtk_theming_engine_peek_property (engine, GTK_CSS_PROPERTY_ICON_SHADOW); + cairo_translate (cr, x, y); cairo_translate (cr, width / 2, height / 2); @@ -1044,6 +1047,14 @@ render_icon_image (GtkThemingEngine *engine, { cairo_translate (cr, -width / 2, -height / 2); + if (!_gtk_css_shadows_value_is_none (shadows)) + { + cairo_push_group (cr); + _gtk_css_image_draw (image, cr, width, height); + cairo_pop_group_to_source (cr); + _gtk_css_shadows_value_paint_icon (shadows, cr); + } + _gtk_css_image_draw (image, cr, width, height); }