summaryrefslogtreecommitdiff
path: root/gtk/gtkcssarrayvalue.c
diff options
context:
space:
mode:
authorBenjamin Otte <otte@redhat.com>2012-07-11 06:56:07 +0200
committerBenjamin Otte <otte@redhat.com>2012-08-28 15:40:56 +0200
commit9b953829fbf1332d00c2ca8a99c7da5e4bda8c64 (patch)
treed11d83a1dbe54909d5ee729a77b55bfa4393649d /gtk/gtkcssarrayvalue.c
parent3f00801e9aedd971378a6aad70e945903db7a798 (diff)
downloadgtk+-9b953829fbf1332d00c2ca8a99c7da5e4bda8c64.tar.gz
css: Introduce _gtk_css_value_compute()
This commit is essentially a large reorganization. Instead of all value subtypes having their own compute function, there is the general _gtk_css_value_compute() function that then calls a vfunc on the subtype.
Diffstat (limited to 'gtk/gtkcssarrayvalue.c')
-rw-r--r--gtk/gtkcssarrayvalue.c59
1 files changed, 28 insertions, 31 deletions
diff --git a/gtk/gtkcssarrayvalue.c b/gtk/gtkcssarrayvalue.c
index 4a52ef84db..985d195762 100644
--- a/gtk/gtkcssarrayvalue.c
+++ b/gtk/gtkcssarrayvalue.c
@@ -40,6 +40,33 @@ gtk_css_value_array_free (GtkCssValue *value)
g_slice_free1 (sizeof (GtkCssValue) + sizeof (GtkCssValue *) * (value->n_values - 1), value);
}
+static GtkCssValue *
+gtk_css_value_array_compute (GtkCssValue *value,
+ GtkStyleContext *context)
+{
+ GtkCssValue *result;
+ gboolean changed = FALSE;
+ guint i;
+
+ if (value->n_values == 0)
+ return _gtk_css_value_ref (value);
+
+ result = _gtk_css_array_value_new_from_array (value->values, value->n_values);
+ for (i = 0; i < value->n_values; i++)
+ {
+ result->values[i] = _gtk_css_value_compute (value->values[i], context);
+ changed |= (result->values[i] != value->values[i]);
+ }
+
+ if (!changed)
+ {
+ _gtk_css_value_unref (result);
+ return _gtk_css_value_ref (value);
+ }
+
+ return result;
+}
+
static gboolean
gtk_css_value_array_equal (const GtkCssValue *value1,
const GtkCssValue *value2)
@@ -89,6 +116,7 @@ gtk_css_value_array_print (const GtkCssValue *value,
static const GtkCssValueClass GTK_CSS_VALUE_ARRAY = {
gtk_css_value_array_free,
+ gtk_css_value_array_compute,
gtk_css_value_array_equal,
gtk_css_value_array_transition,
gtk_css_value_array_print
@@ -154,37 +182,6 @@ _gtk_css_array_value_parse (GtkCssParser *parser,
}
GtkCssValue *
-_gtk_css_array_value_compute (GtkCssValue *value,
- GtkCssValue * (* compute_func) (GtkCssValue *, GtkStyleContext *),
- GtkStyleContext *context)
-{
- GtkCssValue *result;
- gboolean changed = FALSE;
- guint i;
-
- g_return_val_if_fail (value->class == &GTK_CSS_VALUE_ARRAY, NULL);
- g_return_val_if_fail (compute_func != NULL, NULL);
-
- if (value->n_values == 0)
- return _gtk_css_value_ref (value);
-
- result = _gtk_css_array_value_new_from_array (value->values, value->n_values);
- for (i = 0; i < value->n_values; i++)
- {
- result->values[i] = (* compute_func) (value->values[i], context);
- changed |= (result->values[i] != value->values[i]);
- }
-
- if (!changed)
- {
- _gtk_css_value_unref (result);
- return _gtk_css_value_ref (value);
- }
-
- return result;
-}
-
-GtkCssValue *
_gtk_css_array_value_get_nth (const GtkCssValue *value,
guint i)
{