summaryrefslogtreecommitdiff
path: root/gtk/gtkstylecontext.c
diff options
context:
space:
mode:
authorMatthias Clasen <mclasen@redhat.com>2016-06-03 00:19:24 -0400
committerMatthias Clasen <mclasen@redhat.com>2016-06-03 00:26:55 -0400
commit7b0929ad388d26e7c24620c5b8e93f9401eb8859 (patch)
tree30c2beaa4ccba393a27c62ac2b9a4e43c5c9509d /gtk/gtkstylecontext.c
parenta961b05200d7a9fb8f7fc97babbd04c19b37c2cb (diff)
downloadgtk+-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.c71
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 *