diff --git a/gtk/gtkcsscomputedvalues.c b/gtk/gtkcsscomputedvalues.c index caa2251d1b..7aa121f023 100644 --- a/gtk/gtkcsscomputedvalues.c +++ b/gtk/gtkcsscomputedvalues.c @@ -90,15 +90,10 @@ _gtk_css_computed_values_compute_value (GtkCssComputedValues *values, GtkCssValue *specified, GtkCssSection *section) { - GtkCssStyleProperty *prop; - GtkStyleContext *parent; g_return_if_fail (GTK_IS_CSS_COMPUTED_VALUES (values)); g_return_if_fail (GTK_IS_STYLE_CONTEXT (context)); - prop = _gtk_css_style_property_lookup_by_id (id); - parent = gtk_style_context_get_parent (context); - gtk_css_computed_values_ensure_array (values, id + 1); /* http://www.w3.org/TR/css3-cascade/#cascade @@ -106,65 +101,19 @@ _gtk_css_computed_values_compute_value (GtkCssComputedValues *values, * by following this pseudo-algorithm: * 1) Identify all declarations that apply to the element */ - if (specified != NULL) + if (specified == NULL) { - if (_gtk_css_value_is_inherit (specified)) - { - /* 3) if the value of the winning declaration is ‘inherit’, - * the inherited value (see below) becomes the specified value. - */ - specified = NULL; - } - else if (_gtk_css_value_is_initial (specified)) - { - /* if the value of the winning declaration is ‘initial’, - * the initial value (see below) becomes the specified value. - */ - specified = _gtk_css_style_property_get_initial_value (prop); - } + GtkCssStyleProperty *prop = _gtk_css_style_property_lookup_by_id (id); - /* 2) If the cascading process (described below) yields a winning - * declaration and the value of the winning declaration is not - * ‘initial’ or ‘inherit’, the value of the winning declaration - * becomes the specified value. - */ - } - else - { if (_gtk_css_style_property_is_inherit (prop)) - { - /* 4) if the property is inherited, the inherited value becomes - * the specified value. - */ - specified = NULL; - } + specified = _gtk_css_inherit_value_new (); else - { - /* 5) Otherwise, the initial value becomes the specified value. - */ - specified = _gtk_css_style_property_get_initial_value (prop); - } - } - - if (specified == NULL && parent == NULL) - { - /* If the ‘inherit’ value is set on the root element, the property is - * assigned its initial value. */ - specified = _gtk_css_style_property_get_initial_value (prop); - } - - if (specified) - { - g_ptr_array_index (values->values, id) = _gtk_css_value_compute (specified, id, context); + specified = _gtk_css_initial_value_new (); } else - { - GtkCssValue *parent_value; - /* Set NULL here and do the inheritance upon lookup? */ - parent_value = _gtk_style_context_peek_property (parent, id); + _gtk_css_value_ref (specified); - g_ptr_array_index (values->values, id) = _gtk_css_value_ref (parent_value); - } + g_ptr_array_index (values->values, id) = _gtk_css_value_compute (specified, id, context); if (section) { @@ -175,6 +124,8 @@ _gtk_css_computed_values_compute_value (GtkCssComputedValues *values, g_ptr_array_index (values->sections, id) = gtk_css_section_ref (section); } + + _gtk_css_value_unref (specified); } void diff --git a/gtk/gtkcssinheritvalue.c b/gtk/gtkcssinheritvalue.c index 614abe1125..6faeef3c84 100644 --- a/gtk/gtkcssinheritvalue.c +++ b/gtk/gtkcssinheritvalue.c @@ -19,6 +19,9 @@ #include "gtkcssinheritvalueprivate.h" +#include "gtkcssstylepropertyprivate.h" +#include "gtkstylecontextprivate.h" + struct _GtkCssValue { GTK_CSS_VALUE_BASE }; @@ -35,8 +38,14 @@ gtk_css_value_inherit_compute (GtkCssValue *value, guint property_id, GtkStyleContext *context) { - /* This value should be caught further up */ - g_return_val_if_reached (_gtk_css_value_ref (value)); + GtkStyleContext *parent = gtk_style_context_get_parent (context); + + if (parent) + return _gtk_css_value_ref (_gtk_style_context_peek_property (parent, property_id)); + else + return _gtk_css_value_compute (_gtk_css_style_property_get_initial_value (_gtk_css_style_property_lookup_by_id (property_id)), + property_id, + context); } static gboolean @@ -76,11 +85,3 @@ _gtk_css_inherit_value_new (void) { return _gtk_css_value_ref (&inherit); } - -gboolean -_gtk_css_value_is_inherit (const GtkCssValue *value) -{ - g_return_val_if_fail (value != NULL, FALSE); - - return value == &inherit; -} diff --git a/gtk/gtkcssinheritvalueprivate.h b/gtk/gtkcssinheritvalueprivate.h index 768aea2d84..ae69a6b7cf 100644 --- a/gtk/gtkcssinheritvalueprivate.h +++ b/gtk/gtkcssinheritvalueprivate.h @@ -26,8 +26,6 @@ G_BEGIN_DECLS GtkCssValue * _gtk_css_inherit_value_new (void); -gboolean _gtk_css_value_is_inherit (const GtkCssValue *value); - G_END_DECLS #endif /* __GTK_CSS_INHERIT_VALUE_PRIVATE_H__ */ diff --git a/gtk/gtkcssinitialvalue.c b/gtk/gtkcssinitialvalue.c index 24955c3b58..7bebbc87d7 100644 --- a/gtk/gtkcssinitialvalue.c +++ b/gtk/gtkcssinitialvalue.c @@ -19,6 +19,8 @@ #include "gtkcssinitialvalueprivate.h" +#include "gtkcssstylepropertyprivate.h" + struct _GtkCssValue { GTK_CSS_VALUE_BASE }; @@ -35,8 +37,9 @@ gtk_css_value_initial_compute (GtkCssValue *value, guint property_id, GtkStyleContext *context) { - /* This value should be caught further up */ - g_return_val_if_reached (_gtk_css_value_ref (value)); + return _gtk_css_value_compute (_gtk_css_style_property_get_initial_value (_gtk_css_style_property_lookup_by_id (property_id)), + property_id, + context); } static gboolean @@ -76,11 +79,3 @@ _gtk_css_initial_value_new (void) { return _gtk_css_value_ref (&initial); } - -gboolean -_gtk_css_value_is_initial (const GtkCssValue *value) -{ - g_return_val_if_fail (value != NULL, FALSE); - - return value == &initial; -} diff --git a/gtk/gtkcssinitialvalueprivate.h b/gtk/gtkcssinitialvalueprivate.h index 19c39ed666..cee931034b 100644 --- a/gtk/gtkcssinitialvalueprivate.h +++ b/gtk/gtkcssinitialvalueprivate.h @@ -26,8 +26,6 @@ G_BEGIN_DECLS GtkCssValue * _gtk_css_initial_value_new (void); -gboolean _gtk_css_value_is_initial (const GtkCssValue *value); - G_END_DECLS #endif /* __GTK_CSS_INITIAL_VALUE_PRIVATE_H__ */