css: support text-decoration-color
authorPaolo Borelli <pborelli@gnome.org>
Sun, 5 Jul 2015 20:05:33 +0000 (22:05 +0200)
committerPaolo Borelli <pborelli@gnome.org>
Sun, 5 Jul 2015 22:04:06 +0000 (00:04 +0200)
gtk/gtkcssstylepropertyimpl.c
gtk/gtkcsstypesprivate.h
gtk/gtkstylecontext.c

index 8eecc361108ca33348fb04385edfa0269d29034e..3a5dd8530f06a193072310c31a7318eb07f51261 100644 (file)
@@ -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,
index cac528efd17b32bbf9c18f072ae7fa8b3652eb39..2f804919fd9f09feba9e9bec92ac2a84087c4083 100644 (file)
@@ -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,
index 51c4a1c8aa70cdf9311e70b43a418d46fa6535ea..70bc394b20d9546c5fc25ec91977f249d89e0f9a 100644 (file)
@@ -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: