diff --git a/gtk/gtkcssnumbervalue.c b/gtk/gtkcssnumbervalue.c index e82781967b..1c95317351 100644 --- a/gtk/gtkcssnumbervalue.c +++ b/gtk/gtkcssnumbervalue.c @@ -64,6 +64,40 @@ gtk_css_value_number_compute (GtkCssValue *number, GtkCssStyle *parent_values, GtkCssDependencies *dependencies) { + GtkBorderStyle border_style; + + /* special case according to http://dev.w3.org/csswg/css-backgrounds/#the-border-width */ + switch (property_id) + { + case GTK_CSS_PROPERTY_BORDER_TOP_WIDTH: + border_style = _gtk_css_border_style_value_get(gtk_css_style_get_value (values, GTK_CSS_PROPERTY_BORDER_TOP_STYLE)); + if (border_style == GTK_BORDER_STYLE_NONE || border_style == GTK_BORDER_STYLE_HIDDEN) + return _gtk_css_number_value_new (0, GTK_CSS_NUMBER); + break; + case GTK_CSS_PROPERTY_BORDER_RIGHT_WIDTH: + border_style = _gtk_css_border_style_value_get(gtk_css_style_get_value (values, GTK_CSS_PROPERTY_BORDER_RIGHT_STYLE)); + if (border_style == GTK_BORDER_STYLE_NONE || border_style == GTK_BORDER_STYLE_HIDDEN) + return _gtk_css_number_value_new (0, GTK_CSS_NUMBER); + break; + case GTK_CSS_PROPERTY_BORDER_BOTTOM_WIDTH: + border_style = _gtk_css_border_style_value_get(gtk_css_style_get_value (values, GTK_CSS_PROPERTY_BORDER_BOTTOM_STYLE)); + if (border_style == GTK_BORDER_STYLE_NONE || border_style == GTK_BORDER_STYLE_HIDDEN) + return _gtk_css_number_value_new (0, GTK_CSS_NUMBER); + break; + case GTK_CSS_PROPERTY_BORDER_LEFT_WIDTH: + border_style = _gtk_css_border_style_value_get(gtk_css_style_get_value (values, GTK_CSS_PROPERTY_BORDER_LEFT_STYLE)); + if (border_style == GTK_BORDER_STYLE_NONE || border_style == GTK_BORDER_STYLE_HIDDEN) + return _gtk_css_number_value_new (0, GTK_CSS_NUMBER); + break; + case GTK_CSS_PROPERTY_OUTLINE_WIDTH: + border_style = _gtk_css_border_style_value_get(gtk_css_style_get_value (values, GTK_CSS_PROPERTY_OUTLINE_STYLE)); + if (border_style == GTK_BORDER_STYLE_NONE || border_style == GTK_BORDER_STYLE_HIDDEN) + return _gtk_css_number_value_new (0, GTK_CSS_NUMBER); + break; + default: + break; + } + switch (number->unit) { default: diff --git a/gtk/gtkcssstyleproperty.c b/gtk/gtkcssstyleproperty.c index 0ba6567ca5..1590ed28ae 100644 --- a/gtk/gtkcssstyleproperty.c +++ b/gtk/gtkcssstyleproperty.c @@ -156,63 +156,6 @@ _gtk_css_style_property_assign (GtkStyleProperty *property, _gtk_css_value_unref (css_value); } -static gboolean -_gtk_css_style_property_query_special_case (GtkCssStyleProperty *property, - GValue *value, - GtkStyleQueryFunc query_func, - gpointer query_data) -{ - GtkBorderStyle border_style; - - switch (property->id) - { - case GTK_CSS_PROPERTY_BORDER_TOP_WIDTH: - border_style = _gtk_css_border_style_value_get (query_func (GTK_CSS_PROPERTY_BORDER_TOP_STYLE, query_data)); - if (border_style == GTK_BORDER_STYLE_NONE || border_style == GTK_BORDER_STYLE_HIDDEN) - { - g_value_init (value, G_TYPE_INT); - return TRUE; - } - break; - case GTK_CSS_PROPERTY_BORDER_RIGHT_WIDTH: - border_style = _gtk_css_border_style_value_get (query_func (GTK_CSS_PROPERTY_BORDER_RIGHT_STYLE, query_data)); - if (border_style == GTK_BORDER_STYLE_NONE || border_style == GTK_BORDER_STYLE_HIDDEN) - { - g_value_init (value, G_TYPE_INT); - return TRUE; - } - break; - case GTK_CSS_PROPERTY_BORDER_BOTTOM_WIDTH: - border_style = _gtk_css_border_style_value_get (query_func (GTK_CSS_PROPERTY_BORDER_BOTTOM_STYLE, query_data)); - if (border_style == GTK_BORDER_STYLE_NONE || border_style == GTK_BORDER_STYLE_HIDDEN) - { - g_value_init (value, G_TYPE_INT); - return TRUE; - } - break; - case GTK_CSS_PROPERTY_BORDER_LEFT_WIDTH: - border_style = _gtk_css_border_style_value_get (query_func (GTK_CSS_PROPERTY_BORDER_LEFT_STYLE, query_data)); - if (border_style == GTK_BORDER_STYLE_NONE || border_style == GTK_BORDER_STYLE_HIDDEN) - { - g_value_init (value, G_TYPE_INT); - return TRUE; - } - break; - case GTK_CSS_PROPERTY_OUTLINE_WIDTH: - border_style = _gtk_css_border_style_value_get (query_func (GTK_CSS_PROPERTY_OUTLINE_STYLE, query_data)); - if (border_style == GTK_BORDER_STYLE_NONE || border_style == GTK_BORDER_STYLE_HIDDEN) - { - g_value_init (value, G_TYPE_INT); - return TRUE; - } - break; - default: - break; - } - - return FALSE; -} - static void _gtk_css_style_property_query (GtkStyleProperty *property, GValue *value, @@ -221,10 +164,6 @@ _gtk_css_style_property_query (GtkStyleProperty *property, { GtkCssStyleProperty *style_property = GTK_CSS_STYLE_PROPERTY (property); GtkCssValue *css_value; - - /* I don't like this special case being here in this generic code path, but no idea where else to put it. */ - if (_gtk_css_style_property_query_special_case (style_property, value, query_func, query_data)) - return; css_value = (* query_func) (GTK_CSS_STYLE_PROPERTY (property)->id, query_data); if (css_value == NULL)