mirror of
https://gitlab.gnome.org/GNOME/gtk.git
synced 2024-12-30 15:31:34 +00:00
csslookup: Remove 'missing' bitmask
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.
This commit is contained in:
parent
ceb8aedf97
commit
ecad4743bd
@ -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 ++;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -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__ */
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user