diff options
author | Matthias Clasen <mclasen@redhat.com> | 2016-06-03 00:19:24 -0400 |
---|---|---|
committer | Matthias Clasen <mclasen@redhat.com> | 2016-06-03 00:26:55 -0400 |
commit | 7b0929ad388d26e7c24620c5b8e93f9401eb8859 (patch) | |
tree | 30c2beaa4ccba393a27c62ac2b9a4e43c5c9509d /gtk/gtkstylecontext.c | |
parent | a961b05200d7a9fb8f7fc97babbd04c19b37c2cb (diff) | |
download | gtk+-7b0929ad388d26e7c24620c5b8e93f9401eb8859.tar.gz |
Add a function to turn a css style into pango attributes
This is _gtk_style_context_get_pango_attributes, decoupled
from the GtkStyleContext. This will be used to drive css-styled
text rendering from css subnodes of widgets, e.g. for the value
in GtkScale.
Diffstat (limited to 'gtk/gtkstylecontext.c')
-rw-r--r-- | gtk/gtkstylecontext.c | 71 |
1 files changed, 1 insertions, 70 deletions
diff --git a/gtk/gtkstylecontext.c b/gtk/gtkstylecontext.c index f5da8cab76..a6191bd0d1 100644 --- a/gtk/gtkstylecontext.c +++ b/gtk/gtkstylecontext.c @@ -3034,79 +3034,10 @@ _gtk_style_context_get_icon_extents (GtkStyleContext *context, x, y, width, height); } -static PangoUnderline -get_pango_underline_from_style (GtkTextDecorationStyle style) -{ - switch (style) - { - case GTK_CSS_TEXT_DECORATION_STYLE_DOUBLE: - return PANGO_UNDERLINE_DOUBLE; - case GTK_CSS_TEXT_DECORATION_STYLE_WAVY: - return PANGO_UNDERLINE_ERROR; - case GTK_CSS_TEXT_DECORATION_STYLE_SOLID: - default: - return PANGO_UNDERLINE_SINGLE; - } - - g_return_val_if_reached (PANGO_UNDERLINE_SINGLE); -} - -static PangoAttrList * -add_pango_attr(PangoAttrList *attrs, PangoAttribute *attr) -{ - if (attrs == NULL) - attrs = pango_attr_list_new (); - - pango_attr_list_insert (attrs, attr); - - return attrs; -} - PangoAttrList * _gtk_style_context_get_pango_attributes (GtkStyleContext *context) { - PangoAttrList *attrs = NULL; - GtkTextDecorationLine decoration_line; - GtkTextDecorationStyle decoration_style; - 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)); - decoration_style = _gtk_css_text_decoration_style_value_get (_gtk_style_context_peek_property (context, GTK_CSS_PROPERTY_TEXT_DECORATION_STYLE)); - 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 (get_pango_underline_from_style (decoration_style))); - 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: - break; - } - - /* letter-spacing */ - letter_spacing = _gtk_css_number_value_get (_gtk_style_context_peek_property (context, GTK_CSS_PROPERTY_LETTER_SPACING), 100); - if (letter_spacing != 0) - { - attrs = add_pango_attr (attrs, pango_attr_letter_spacing_new (letter_spacing * PANGO_SCALE)); - } - - return attrs; + return gtk_css_style_get_pango_attributes (gtk_style_context_lookup_style (context)); } static AtkAttributeSet * |