From a57e6731c4141d97afd8fa36b9e6b5587fbb8412 Mon Sep 17 00:00:00 2001 From: Paolo Borelli Date: Sun, 5 Jul 2015 22:05:33 +0200 Subject: [PATCH] css: support text-decoration-color --- gtk/gtkcssstylepropertyimpl.c | 10 ++++++++++ gtk/gtkcsstypesprivate.h | 1 + gtk/gtkstylecontext.c | 12 ++++++++++++ 3 files changed, 23 insertions(+) diff --git a/gtk/gtkcssstylepropertyimpl.c b/gtk/gtkcssstylepropertyimpl.c index 8eecc36110..3a5dd8530f 100644 --- a/gtk/gtkcssstylepropertyimpl.c +++ b/gtk/gtkcssstylepropertyimpl.c @@ -1104,6 +1104,16 @@ _gtk_css_style_property_init_properties (void) NULL, _gtk_css_text_decoration_line_value_new (GTK_CSS_TEXT_DECORATION_LINE_NONE)); + gtk_css_style_property_register ("text-decoration-color", + GTK_CSS_PROPERTY_TEXT_DECORATION_COLOR, + G_TYPE_NONE, + GTK_STYLE_PROPERTY_ANIMATED, + GTK_CSS_AFFECTS_TEXT | GTK_CSS_AFFECTS_TEXT_ATTRS, + color_parse, + NULL, + NULL, + _gtk_css_color_value_new_current_color ()); + gtk_css_style_property_register ("text-shadow", GTK_CSS_PROPERTY_TEXT_SHADOW, G_TYPE_NONE, diff --git a/gtk/gtkcsstypesprivate.h b/gtk/gtkcsstypesprivate.h index cac528efd1..2f804919fd 100644 --- a/gtk/gtkcsstypesprivate.h +++ b/gtk/gtkcsstypesprivate.h @@ -120,6 +120,7 @@ enum { /*< skip >*/ GTK_CSS_PROPERTY_FONT_STRETCH, GTK_CSS_PROPERTY_LETTER_SPACING, GTK_CSS_PROPERTY_TEXT_DECORATION_LINE, + GTK_CSS_PROPERTY_TEXT_DECORATION_COLOR, GTK_CSS_PROPERTY_TEXT_SHADOW, GTK_CSS_PROPERTY_BOX_SHADOW, GTK_CSS_PROPERTY_MARGIN_TOP, diff --git a/gtk/gtkstylecontext.c b/gtk/gtkstylecontext.c index 51c4a1c8aa..70bc394b20 100644 --- a/gtk/gtkstylecontext.c +++ b/gtk/gtkstylecontext.c @@ -3164,18 +3164,30 @@ _gtk_style_context_get_pango_attributes (GtkStyleContext *context) { PangoAttrList *attrs = NULL; GtkTextDecorationLine decoration_line; + const GdkRGBA *color; + const GdkRGBA *decoration_color; gint letter_spacing; /* text-decoration */ decoration_line = _gtk_css_text_decoration_line_value_get (_gtk_style_context_peek_property (context, GTK_CSS_PROPERTY_TEXT_DECORATION_LINE)); + color = _gtk_css_rgba_value_get_rgba (_gtk_style_context_peek_property (context, GTK_CSS_PROPERTY_COLOR)); + decoration_color = _gtk_css_rgba_value_get_rgba (_gtk_style_context_peek_property (context, GTK_CSS_PROPERTY_TEXT_DECORATION_COLOR)); switch (decoration_line) { case GTK_CSS_TEXT_DECORATION_LINE_UNDERLINE: attrs = add_pango_attr (attrs, pango_attr_underline_new (PANGO_UNDERLINE_SINGLE)); + if (!gdk_rgba_equal(color, decoration_color)) + attrs = add_pango_attr (attrs, pango_attr_underline_color_new (decoration_color->red * 65535. + 0.5, + decoration_color->green * 65535. + 0.5, + decoration_color->blue * 65535. + 0.5)); break; case GTK_CSS_TEXT_DECORATION_LINE_LINE_THROUGH: attrs = add_pango_attr (attrs, pango_attr_strikethrough_new (TRUE)); + if (!gdk_rgba_equal(color, decoration_color)) + attrs = add_pango_attr (attrs, pango_attr_strikethrough_color_new (decoration_color->red * 65535. + 0.5, + decoration_color->green * 65535. + 0.5, + decoration_color->blue * 65535. + 0.5)); break; case GTK_CSS_TEXT_DECORATION_LINE_NONE: default: -- 2.30.2