csslookup: Remove 'missing' bitmask
authorTimm Bäder <mail@baedert.org>
Thu, 22 Aug 2019 16:00:37 +0000 (18:00 +0200)
committerTimm Bäder <mail@baedert.org>
Mon, 9 Sep 2019 15:36:24 +0000 (17:36 +0200)
It's almost never useful to have a bitmask here, since it's only used
for the intersection case in gtk_css_style_provider_lookup. However,
even if that returns true, we still need to check every single style
property for being set again in the look afterwards.

Just remove the bitmask.

gtk/gtkcsslookup.c
gtk/gtkcsslookupprivate.h
gtk/gtkcssprovider.c

index b871c8f7a0a2b4d092fad38f94783b9f7f108734..a595479162ef589a3fb4cbb63b4a4d447cf5c59f 100644 (file)
@@ -29,22 +29,11 @@ _gtk_css_lookup_init (GtkCssLookup     *lookup,
                       const GtkBitmask *relevant)
 {
   memset (lookup, 0, sizeof (*lookup));
-
-  if (relevant)
-    {
-      lookup->missing = _gtk_bitmask_copy (relevant);
-    }
-  else
-    {
-      lookup->missing = _gtk_bitmask_new ();
-      lookup->missing = _gtk_bitmask_invert_range (lookup->missing, 0, GTK_CSS_PROPERTY_N_PROPERTIES);
-    }
 }
 
 void
 _gtk_css_lookup_destroy (GtkCssLookup *lookup)
 {
-  _gtk_bitmask_free (lookup->missing);
 }
 
 gboolean
@@ -53,7 +42,13 @@ _gtk_css_lookup_is_missing (const GtkCssLookup *lookup,
 {
   gtk_internal_return_val_if_fail (lookup != NULL, FALSE);
 
-  return _gtk_bitmask_get (lookup->missing, id);
+  return lookup->values[id].value == NULL;
+}
+
+gboolean
+_gtk_css_lookup_all_set (const GtkCssLookup *lookup)
+{
+  return lookup->n_set_values == GTK_CSS_PROPERTY_N_PROPERTIES;
 }
 
 /**
@@ -76,12 +71,12 @@ _gtk_css_lookup_set (GtkCssLookup  *lookup,
                      GtkCssValue   *value)
 {
   gtk_internal_return_if_fail (lookup != NULL);
-  gtk_internal_return_if_fail (_gtk_bitmask_get (lookup->missing, id));
   gtk_internal_return_if_fail (value != NULL);
+  gtk_internal_return_if_fail (lookup->values[id].value == NULL);
 
-  lookup->missing = _gtk_bitmask_set (lookup->missing, id, FALSE);
   lookup->values[id].value = value;
   lookup->values[id].section = section;
+  lookup->n_set_values ++;
 }
 
 /**
index 5c8bbc96f14f2c8896061cced48e4470307d3784..0d6c1fc529d9bbd98126d5365e713f10a86a258f 100644 (file)
@@ -36,17 +36,16 @@ typedef struct {
 } GtkCssLookupValue;
 
 struct _GtkCssLookup {
-  GtkBitmask        *missing;
+  guint              n_set_values;
   GtkCssLookupValue  values[GTK_CSS_PROPERTY_N_PROPERTIES];
 };
 
 void                    _gtk_css_lookup_init                    (GtkCssLookup               *lookup,
                                                                  const GtkBitmask           *relevant);
 void                    _gtk_css_lookup_destroy                 (GtkCssLookup               *lookup);
-
-static inline const GtkBitmask *_gtk_css_lookup_get_missing     (const GtkCssLookup         *lookup);
 gboolean                _gtk_css_lookup_is_missing              (const GtkCssLookup         *lookup,
                                                                  guint                       id);
+gboolean                _gtk_css_lookup_all_set                 (const GtkCssLookup         *lookup);
 void                    _gtk_css_lookup_set                     (GtkCssLookup               *lookup,
                                                                  guint                       id,
                                                                  GtkCssSection              *section,
@@ -56,14 +55,6 @@ void                    _gtk_css_lookup_resolve                 (GtkCssLookup
                                                                  GtkCssStaticStyle          *style,
                                                                  GtkCssStyle                *parent_style);
 
-static inline const GtkBitmask *
-_gtk_css_lookup_get_missing (const GtkCssLookup *lookup)
-{
-  return lookup->missing;
-}
-
-
-
 G_END_DECLS
 
 #endif /* __GTK_CSS_LOOKUP_PRIVATE_H__ */
index 3ea1669b2d055b5957ae83d3ebfbc526955d34bd..32a098dc44fa2604d07ee06a8a70c41a384ea729 100644 (file)
@@ -539,10 +539,6 @@ gtk_css_style_provider_lookup (GtkStyleProvider    *provider,
           if (ruleset->styles == NULL)
             continue;
 
-          if (!_gtk_bitmask_intersects (_gtk_css_lookup_get_missing (lookup),
-                                        ruleset->set_styles))
-          continue;
-
           for (j = 0; j < ruleset->n_styles; j++)
             {
               GtkCssStyleProperty *prop = ruleset->styles[j].property;
@@ -554,10 +550,10 @@ gtk_css_style_provider_lookup (GtkStyleProvider    *provider,
               _gtk_css_lookup_set (lookup,
                                    id,
                                    ruleset->styles[j].section,
-                                  ruleset->styles[j].value);
+                                   ruleset->styles[j].value);
             }
 
-          if (_gtk_bitmask_is_empty (_gtk_css_lookup_get_missing (lookup)))
+          if (_gtk_css_lookup_all_set (lookup))
             break;
         }