diff options
author | Benjamin Otte <otte@redhat.com> | 2012-07-23 16:14:20 +0200 |
---|---|---|
committer | Benjamin Otte <otte@redhat.com> | 2012-08-28 15:42:23 +0200 |
commit | 9b228c59d57eb6cd307be0ddfe4c6cb8c94f66a9 (patch) | |
tree | bdba9f4c2965ed475d270e926c7362f050d2317a /gtk/gtkcsscomputedvalues.c | |
parent | 2cb9dac14c2299c992827863553bd0b019765772 (diff) | |
download | gtk+-9b228c59d57eb6cd307be0ddfe4c6cb8c94f66a9.tar.gz |
cssomputedvalues: Track dependencies
We now track what values have dependencies on what other values so that
we could in theory recompute them when we need to.
Diffstat (limited to 'gtk/gtkcsscomputedvalues.c')
-rw-r--r-- | gtk/gtkcsscomputedvalues.c | 33 |
1 files changed, 30 insertions, 3 deletions
diff --git a/gtk/gtkcsscomputedvalues.c b/gtk/gtkcsscomputedvalues.c index ad0353046d..63b0ee7a9f 100644 --- a/gtk/gtkcsscomputedvalues.c +++ b/gtk/gtkcsscomputedvalues.c @@ -47,17 +47,34 @@ gtk_css_computed_values_dispose (GObject *object) } static void +gtk_css_computed_values_finalize (GObject *object) +{ + GtkCssComputedValues *values = GTK_CSS_COMPUTED_VALUES (object); + + _gtk_bitmask_free (values->depends_on_parent); + _gtk_bitmask_free (values->equals_parent); + _gtk_bitmask_free (values->depends_on_color); + _gtk_bitmask_free (values->depends_on_font_size); + + G_OBJECT_CLASS (_gtk_css_computed_values_parent_class)->finalize (object); +} + +static void _gtk_css_computed_values_class_init (GtkCssComputedValuesClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); object_class->dispose = gtk_css_computed_values_dispose; + object_class->finalize = gtk_css_computed_values_finalize; } static void -_gtk_css_computed_values_init (GtkCssComputedValues *computed_values) +_gtk_css_computed_values_init (GtkCssComputedValues *values) { - + values->depends_on_parent = _gtk_bitmask_new (); + values->equals_parent = _gtk_bitmask_new (); + values->depends_on_color = _gtk_bitmask_new (); + values->depends_on_font_size = _gtk_bitmask_new (); } GtkCssComputedValues * @@ -90,6 +107,7 @@ _gtk_css_computed_values_compute_value (GtkCssComputedValues *values, GtkCssValue *specified, GtkCssSection *section) { + GtkCssDependencies dependencies; g_return_if_fail (GTK_IS_CSS_COMPUTED_VALUES (values)); g_return_if_fail (GTK_IS_STYLE_CONTEXT (context)); @@ -113,7 +131,16 @@ _gtk_css_computed_values_compute_value (GtkCssComputedValues *values, else _gtk_css_value_ref (specified); - g_ptr_array_index (values->values, id) = _gtk_css_value_compute (specified, id, context, NULL); + g_ptr_array_index (values->values, id) = _gtk_css_value_compute (specified, id, context, &dependencies); + + if (dependencies & (GTK_CSS_DEPENDS_ON_PARENT | GTK_CSS_EQUALS_PARENT)) + values->depends_on_parent = _gtk_bitmask_set (values->depends_on_parent, id, TRUE); + if (dependencies & (GTK_CSS_EQUALS_PARENT)) + values->equals_parent = _gtk_bitmask_set (values->equals_parent, id, TRUE); + if (dependencies & (GTK_CSS_DEPENDS_ON_COLOR)) + values->depends_on_color = _gtk_bitmask_set (values->depends_on_color, id, TRUE); + if (dependencies & (GTK_CSS_DEPENDS_ON_FONT_SIZE)) + values->depends_on_font_size = _gtk_bitmask_set (values->depends_on_font_size, id, TRUE); if (section) { |