cssbordervalue: Avoid allocating new value if not needed

This commit is contained in:
Benjamin Otte 2016-04-21 22:28:40 +02:00
parent 2fc0d6a91a
commit f93eca5604

View File

@ -48,28 +48,33 @@ gtk_css_value_border_compute (GtkCssValue *value,
GtkCssStyle *style,
GtkCssStyle *parent_style)
{
GtkCssValue *values[4];
GtkCssValue *computed;
gboolean changed = FALSE;
guint i;
computed = _gtk_css_border_value_new (NULL, NULL, NULL, NULL);
computed->fill = value->fill;
for (i = 0; i < 4; i++)
{
if (value->values[i])
{
computed->values[i] = _gtk_css_value_compute (value->values[i], property_id, provider, style, parent_style);
changed |= (computed->values[i] != value->values[i]);
values[i] = _gtk_css_value_compute (value->values[i], property_id, provider, style, parent_style);
changed |= (values[i] != value->values[i]);
}
}
if (!changed)
{
_gtk_css_value_unref (computed);
for (i = 0; i < 4; i++)
{
if (values[i] != NULL)
_gtk_css_value_unref (values[i]);
}
return _gtk_css_value_ref (value);
}
computed = _gtk_css_border_value_new (values[0], values[1], values[2], values[3]);
computed->fill = value->fill;
return computed;
}