]> Pileus Git - ~andy/gtk/blobdiff - gtk/gtkcsslookup.c
Really keep GtkBubbleWindow private
[~andy/gtk] / gtk / gtkcsslookup.c
index 940f68cebb8dbaabde8295b8be56e6a4b6dcd6c4..acd35b6049111d8f54905b27c3c1e7a600c402ac 100644 (file)
 #include "gtkcssstylepropertyprivate.h"
 #include "gtkstylepropertiesprivate.h"
 
-typedef struct {
-  GtkCssSection     *section;
-  GtkCssValue       *value;
-  GtkCssValue       *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 ();
-  lookup->missing = _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)
@@ -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 */
     }
 }