[St] Implement text-decoration: [underline|strikethrough]
Move CSS handling of StLabel and StButton for their underlying ClutterText objects into st_private, and implement support for the underline and strikethrough St text-decoration properties. Overline isn't implemented for lack of a corresponding Pango attribute, and blink, well... https://bugzilla.gnome.org/show_bug.cgi?id=599661
This commit is contained in:
parent
c4a49b4de2
commit
55fbb9d0af
@ -98,10 +98,6 @@ static void
|
|||||||
st_button_update_label_style (StButton *button)
|
st_button_update_label_style (StButton *button)
|
||||||
{
|
{
|
||||||
ClutterActor *label;
|
ClutterActor *label;
|
||||||
StThemeNode *theme_node;
|
|
||||||
ClutterColor color;
|
|
||||||
const PangoFontDescription *font;
|
|
||||||
gchar *font_string = NULL;
|
|
||||||
|
|
||||||
label = st_bin_get_child ((StBin*) button);
|
label = st_bin_get_child ((StBin*) button);
|
||||||
|
|
||||||
@ -109,15 +105,7 @@ st_button_update_label_style (StButton *button)
|
|||||||
if (!CLUTTER_IS_TEXT (label))
|
if (!CLUTTER_IS_TEXT (label))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
theme_node = st_widget_get_theme_node (ST_WIDGET (button));
|
_st_set_text_from_style ((ClutterText*) label, st_widget_get_theme_node (ST_WIDGET (button)));
|
||||||
|
|
||||||
st_theme_node_get_foreground_color (theme_node, &color);
|
|
||||||
clutter_text_set_color (CLUTTER_TEXT (label), &color);
|
|
||||||
|
|
||||||
font = st_theme_node_get_font (theme_node);
|
|
||||||
font_string = pango_font_description_to_string (font);
|
|
||||||
clutter_text_set_font_name (CLUTTER_TEXT (label), font_string);
|
|
||||||
g_free (font_string);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -43,7 +43,7 @@
|
|||||||
#include <clutter/clutter.h>
|
#include <clutter/clutter.h>
|
||||||
|
|
||||||
#include "st-label.h"
|
#include "st-label.h"
|
||||||
|
#include "st-private.h"
|
||||||
#include "st-widget.h"
|
#include "st-widget.h"
|
||||||
|
|
||||||
enum
|
enum
|
||||||
@ -110,21 +110,9 @@ st_label_get_property (GObject *gobject,
|
|||||||
static void
|
static void
|
||||||
st_label_style_changed (StWidget *self)
|
st_label_style_changed (StWidget *self)
|
||||||
{
|
{
|
||||||
StLabelPrivate *priv;
|
StLabelPrivate *priv = ST_LABEL(self)->priv;
|
||||||
StThemeNode *theme_node;
|
|
||||||
ClutterColor color;
|
|
||||||
const PangoFontDescription *font;
|
|
||||||
gchar *font_string;
|
|
||||||
|
|
||||||
priv = ST_LABEL (self)->priv;
|
_st_set_text_from_style ((ClutterText *)priv->label, st_widget_get_theme_node (self));
|
||||||
theme_node = st_widget_get_theme_node (self);
|
|
||||||
st_theme_node_get_foreground_color (theme_node, &color);
|
|
||||||
clutter_text_set_color (CLUTTER_TEXT (priv->label), &color);
|
|
||||||
|
|
||||||
font = st_theme_node_get_font (theme_node);
|
|
||||||
font_string = pango_font_description_to_string (font);
|
|
||||||
clutter_text_set_font_name (CLUTTER_TEXT (priv->label), font_string);
|
|
||||||
g_free (font_string);
|
|
||||||
|
|
||||||
ST_WIDGET_CLASS (st_label_parent_class)->style_changed (self);
|
ST_WIDGET_CLASS (st_label_parent_class)->style_changed (self);
|
||||||
}
|
}
|
||||||
|
@ -110,3 +110,52 @@ _st_allocate_fill (ClutterActor *child,
|
|||||||
*childbox = allocation;
|
*childbox = allocation;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* _st_set_text_from_style:
|
||||||
|
* @text: Target #ClutterText
|
||||||
|
* @theme_node: Source #StThemeNode
|
||||||
|
*
|
||||||
|
* Set various GObject properties of the @text object using
|
||||||
|
* CSS information from @theme_node.
|
||||||
|
*/
|
||||||
|
void
|
||||||
|
_st_set_text_from_style (ClutterText *text,
|
||||||
|
StThemeNode *theme_node)
|
||||||
|
{
|
||||||
|
|
||||||
|
ClutterColor color;
|
||||||
|
StTextDecoration decoration;
|
||||||
|
PangoAttrList *attribs;
|
||||||
|
const PangoFontDescription *font;
|
||||||
|
gchar *font_string;
|
||||||
|
|
||||||
|
st_theme_node_get_foreground_color (theme_node, &color);
|
||||||
|
clutter_text_set_color (text, &color);
|
||||||
|
|
||||||
|
font = st_theme_node_get_font (theme_node);
|
||||||
|
font_string = pango_font_description_to_string (font);
|
||||||
|
clutter_text_set_font_name (text, font_string);
|
||||||
|
g_free (font_string);
|
||||||
|
|
||||||
|
attribs = pango_attr_list_new ();
|
||||||
|
|
||||||
|
decoration = st_theme_node_get_text_decoration (theme_node);
|
||||||
|
if (decoration & ST_TEXT_DECORATION_UNDERLINE)
|
||||||
|
{
|
||||||
|
PangoAttribute *underline = pango_attr_underline_new (PANGO_UNDERLINE_SINGLE);
|
||||||
|
pango_attr_list_insert (attribs, underline);
|
||||||
|
}
|
||||||
|
if (decoration & ST_TEXT_DECORATION_LINE_THROUGH)
|
||||||
|
{
|
||||||
|
PangoAttribute *strikethrough = pango_attr_strikethrough_new (TRUE);
|
||||||
|
pango_attr_list_insert (attribs, strikethrough);
|
||||||
|
}
|
||||||
|
/* Pango doesn't have an equivalent attribute for _OVERLINE, and we deliberately
|
||||||
|
* skip BLINK (for now...)
|
||||||
|
*/
|
||||||
|
|
||||||
|
clutter_text_set_attributes (text, attribs);
|
||||||
|
|
||||||
|
pango_attr_list_unref (attribs);
|
||||||
|
}
|
||||||
|
@ -55,4 +55,7 @@ void _st_allocate_fill (ClutterActor *child,
|
|||||||
gboolean x_fill,
|
gboolean x_fill,
|
||||||
gboolean y_fill);
|
gboolean y_fill);
|
||||||
|
|
||||||
|
void _st_set_text_from_style (ClutterText *text,
|
||||||
|
StThemeNode *theme_node);
|
||||||
|
|
||||||
#endif /* __ST_PRIVATE_H__ */
|
#endif /* __ST_PRIVATE_H__ */
|
||||||
|
Loading…
Reference in New Issue
Block a user