[gtk+/wip/css: 124/125] css: Handle 'currentColor' special value
- From: Benjamin Otte <otte src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+/wip/css: 124/125] css: Handle 'currentColor' special value
- Date: Tue, 3 Jan 2012 04:21:08 +0000 (UTC)
commit 16d1106cbfdaacff3ccee6c176543935739b98aa
Author: Benjamin Otte <otte redhat com>
Date: Tue Jan 3 04:38:09 2012 +0100
css: Handle 'currentColor' special value
Computes to the value of the 'color' property, or when used on that
property, is treated as 'inherit'.
gtk/gtkcssstylefuncs.c | 15 ++++++++++++++-
gtk/gtkcssstylepropertyimpl.c | 26 +++++++++++++++++++++++++-
2 files changed, 39 insertions(+), 2 deletions(-)
---
diff --git a/gtk/gtkcssstylefuncs.c b/gtk/gtkcssstylefuncs.c
index af1ad5c..7b53bbb 100644
--- a/gtk/gtkcssstylefuncs.c
+++ b/gtk/gtkcssstylefuncs.c
@@ -173,6 +173,14 @@ rgba_value_parse (GtkCssParser *parser,
GtkSymbolicColor *symbolic;
GdkRGBA rgba;
+ if (_gtk_css_parser_try (parser, "currentcolor", TRUE))
+ {
+ g_value_unset (value);
+ g_value_init (value, GTK_TYPE_CSS_SPECIAL_VALUE);
+ g_value_set_enum (value, GTK_CSS_CURRENT_COLOR);
+ return TRUE;
+ }
+
symbolic = _gtk_css_parser_read_symbolic_color (parser);
if (symbolic == NULL)
return FALSE;
@@ -215,7 +223,12 @@ rgba_value_compute (GValue *computed,
{
GdkRGBA rgba, white = { 1, 1, 1, 1 };
- if (G_VALUE_HOLDS (specified, GTK_TYPE_SYMBOLIC_COLOR))
+ if (G_VALUE_HOLDS (specified, GTK_TYPE_CSS_SPECIAL_VALUE))
+ {
+ g_assert (g_value_get_enum (specified) == GTK_CSS_CURRENT_COLOR);
+ g_value_copy (_gtk_style_context_peek_property (context, "color"), computed);
+ }
+ else if (G_VALUE_HOLDS (specified, GTK_TYPE_SYMBOLIC_COLOR))
{
if (_gtk_style_context_resolve_color (context,
g_value_get_boxed (specified),
diff --git a/gtk/gtkcssstylepropertyimpl.c b/gtk/gtkcssstylepropertyimpl.c
index e4ecbcd..f3e70fd 100644
--- a/gtk/gtkcssstylepropertyimpl.c
+++ b/gtk/gtkcssstylepropertyimpl.c
@@ -46,6 +46,30 @@
/*** REGISTRATION ***/
static void
+color_compute (GtkCssStyleProperty *property,
+ GValue *computed,
+ GtkStyleContext *context,
+ const GValue *specified)
+{
+ g_value_init (computed, GDK_TYPE_RGBA);
+
+ if (G_VALUE_HOLDS (specified, GTK_TYPE_CSS_SPECIAL_VALUE))
+ {
+ GtkStyleContext *parent = gtk_style_context_get_parent (context);
+ g_assert (g_value_get_enum (specified) == GTK_CSS_CURRENT_COLOR);
+
+ if (parent)
+ g_value_copy (_gtk_style_context_peek_property (parent, "color"), computed);
+ else
+ _gtk_css_style_compute_value (computed,
+ context,
+ _gtk_css_style_property_get_initial_value (property));
+ }
+ else
+ _gtk_css_style_compute_value (computed, context, specified);
+}
+
+static void
_gtk_style_property_register (const char * name,
GType value_type,
GtkStylePropertyFlags flags,
@@ -420,7 +444,7 @@ _gtk_css_style_property_init_properties (void)
GTK_STYLE_PROPERTY_INHERIT,
NULL,
NULL,
- NULL,
+ color_compute,
&rgba);
gtk_style_property_register ("font-size",
G_TYPE_DOUBLE,
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]