X-Git-Url: http://pileus.org/git/?a=blobdiff_plain;f=gtk%2Fgtkcsslookup.c;h=acd35b6049111d8f54905b27c3c1e7a600c402ac;hb=32825a66ac8e65bf98cafed26a339fa1f31eddd4;hp=621f57551db9fd760a13ca8839b5fd88e4d08aed;hpb=9d0febc9a64a5bfb0fcfc3a88de4757f6c1ff090;p=~andy%2Fgtk diff --git a/gtk/gtkcsslookup.c b/gtk/gtkcsslookup.c index 621f57551..acd35b604 100644 --- a/gtk/gtkcsslookup.c +++ b/gtk/gtkcsslookup.c @@ -24,26 +24,23 @@ #include "gtkcssstylepropertyprivate.h" #include "gtkstylepropertiesprivate.h" -typedef struct { - GtkCssSection *section; - const GValue *value; - const GValue *computed; -} GtkCssLookupValue; - -struct _GtkCssLookup { - GtkBitmask *missing; - GtkCssLookupValue values[1]; -}; - GtkCssLookup * -_gtk_css_lookup_new (void) +_gtk_css_lookup_new (const GtkBitmask *relevant) { GtkCssLookup *lookup; guint n = _gtk_css_style_property_get_n_properties (); lookup = g_malloc0 (sizeof (GtkCssLookup) + sizeof (GtkCssLookupValue) * n); - lookup->missing = _gtk_bitmask_new (); - _gtk_bitmask_invert_range (lookup->missing, 0, n); + + if (relevant) + { + lookup->missing = _gtk_bitmask_copy (relevant); + } + else + { + lookup->missing = _gtk_bitmask_new (); + lookup->missing = _gtk_bitmask_invert_range (lookup->missing, 0, n); + } return lookup; } @@ -57,14 +54,6 @@ _gtk_css_lookup_free (GtkCssLookup *lookup) g_free (lookup); } -const GtkBitmask * -_gtk_css_lookup_get_missing (const GtkCssLookup *lookup) -{ - g_return_val_if_fail (lookup != NULL, NULL); - - return lookup->missing; -} - gboolean _gtk_css_lookup_is_missing (const GtkCssLookup *lookup, guint id) @@ -91,13 +80,13 @@ void _gtk_css_lookup_set (GtkCssLookup *lookup, guint id, GtkCssSection *section, - const GValue *value) + GtkCssValue *value) { g_return_if_fail (lookup != NULL); g_return_if_fail (_gtk_bitmask_get (lookup->missing, id)); g_return_if_fail (value != NULL); - _gtk_bitmask_set (lookup->missing, id, FALSE); + lookup->missing = _gtk_bitmask_set (lookup->missing, id, FALSE); lookup->values[id].value = value; lookup->values[id].section = section; } @@ -125,13 +114,13 @@ void _gtk_css_lookup_set_computed (GtkCssLookup *lookup, guint id, GtkCssSection *section, - const GValue *value) + GtkCssValue *value) { g_return_if_fail (lookup != NULL); g_return_if_fail (_gtk_bitmask_get (lookup->missing, id)); g_return_if_fail (value != NULL); - _gtk_bitmask_set (lookup->missing, id, FALSE); + lookup->missing = _gtk_bitmask_set (lookup->missing, id, FALSE); lookup->values[id].computed = value; lookup->values[id].section = section; } @@ -149,15 +138,17 @@ _gtk_css_lookup_set_computed (GtkCssLookup *lookup, * an issue, go fix it. **/ void -_gtk_css_lookup_resolve (GtkCssLookup *lookup, - GtkStyleContext *context, - GtkCssComputedValues *values) +_gtk_css_lookup_resolve (GtkCssLookup *lookup, + GtkStyleProviderPrivate *provider, + GtkCssComputedValues *values, + GtkCssComputedValues *parent_values) { guint i, n; g_return_if_fail (lookup != NULL); - g_return_if_fail (GTK_IS_STYLE_CONTEXT (context)); + g_return_if_fail (GTK_IS_STYLE_PROVIDER_PRIVATE (provider)); g_return_if_fail (GTK_IS_CSS_COMPUTED_VALUES (values)); + g_return_if_fail (parent_values == NULL || GTK_IS_CSS_COMPUTED_VALUES (parent_values)); n = _gtk_css_style_property_get_n_properties (); @@ -167,12 +158,16 @@ _gtk_css_lookup_resolve (GtkCssLookup *lookup, _gtk_css_computed_values_set_value (values, i, lookup->values[i].computed, + 0, lookup->values[i].section); - else + else if (lookup->values[i].value || + _gtk_bitmask_get (lookup->missing, i)) _gtk_css_computed_values_compute_value (values, - context, + provider, + parent_values, i, lookup->values[i].value, lookup->values[i].section); + /* else not a relevant property */ } }