summaryrefslogtreecommitdiff
path: root/gtk/gtkcsscomputedvalues.c
diff options
context:
space:
mode:
authorBenjamin Otte <otte@redhat.com>2012-07-23 16:14:20 +0200
committerBenjamin Otte <otte@redhat.com>2012-08-28 15:42:23 +0200
commit9b228c59d57eb6cd307be0ddfe4c6cb8c94f66a9 (patch)
treebdba9f4c2965ed475d270e926c7362f050d2317a /gtk/gtkcsscomputedvalues.c
parent2cb9dac14c2299c992827863553bd0b019765772 (diff)
downloadgtk+-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.c33
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)
{