From 24dde6346a727e1c500bd374b03d97341e4de863 Mon Sep 17 00:00:00 2001 From: Benjamin Otte Date: Sun, 6 Sep 2015 07:36:02 +0200 Subject: [PATCH] API: cssselector: Stop supporting regions The namespace that belonged to regions is supposed to be used for CssNode names. --- gtk/gtkcssnode.c | 6 +- gtk/gtkcssselector.c | 223 +------------------------------------------ 2 files changed, 6 insertions(+), 223 deletions(-) diff --git a/gtk/gtkcssnode.c b/gtk/gtkcssnode.c index a8dcaa0d2e..38d3eb03aa 100644 --- a/gtk/gtkcssnode.c +++ b/gtk/gtkcssnode.c @@ -1189,16 +1189,14 @@ gtk_css_node_add_region (GtkCssNode *cssnode, GQuark region, GtkRegionFlags flags) { - if (gtk_css_node_declaration_add_region (&cssnode->decl, region, flags)) - gtk_css_node_invalidate (cssnode, GTK_CSS_CHANGE_REGION); + gtk_css_node_declaration_add_region (&cssnode->decl, region, flags); } void gtk_css_node_remove_region (GtkCssNode *cssnode, GQuark region) { - if (gtk_css_node_declaration_remove_region (&cssnode->decl, region)) - gtk_css_node_invalidate (cssnode, GTK_CSS_CHANGE_REGION); + gtk_css_node_declaration_remove_region (&cssnode->decl, region); } gboolean diff --git a/gtk/gtkcssselector.c b/gtk/gtkcssselector.c index ea4f252529..3be62ee15d 100644 --- a/gtk/gtkcssselector.c +++ b/gtk/gtkcssselector.c @@ -332,63 +332,6 @@ static const GtkCssSelectorClass GTK_CSS_SELECTOR_DESCENDANT = { FALSE }; -/* DESCENDANT FOR REGION */ - -static void -gtk_css_selector_descendant_for_region_print (const GtkCssSelector *selector, - GString *string) -{ - g_string_append_c (string, ' '); -} - -static gboolean -gtk_css_selector_descendant_for_region_foreach_matcher (const GtkCssSelector *selector, - const GtkCssMatcher *matcher, - GtkCssSelectorForeachFunc func, - gpointer data) -{ - GtkCssMatcher ancestor; - - if (_gtk_css_matcher_has_regions (matcher)) - { - if (func (selector, matcher, data)) - return TRUE; - } - - while (_gtk_css_matcher_get_parent (&ancestor, matcher)) - { - matcher = &ancestor; - - if (func (selector, matcher, data)) - return TRUE; - - /* any matchers are dangerous here, as we may loop forever, but - we can terminate now as all possible matches have already been added */ - if (_gtk_css_matcher_matches_any (matcher)) - break; - } - - return FALSE; -} - -static GtkCssChange -gtk_css_selector_descendant_for_region_get_change (const GtkCssSelector *selector, GtkCssChange previous_change) -{ - return previous_change | _gtk_css_change_for_child (previous_change); -} - -static const GtkCssSelectorClass GTK_CSS_SELECTOR_DESCENDANT_FOR_REGION = { - "descendant_for_region", - gtk_css_selector_descendant_for_region_print, - gtk_css_selector_descendant_for_region_foreach_matcher, - gtk_css_selector_default_match_one, - gtk_css_selector_descendant_for_region_get_change, - gtk_css_selector_default_add_specificity, - gtk_css_selector_default_hash_one, - gtk_css_selector_default_compare_one, - FALSE -}; - /* CHILD */ static void @@ -709,107 +652,6 @@ comp_name (const GtkCssSelector *a, DEFINE_SIMPLE_SELECTOR(name, NAME, print_name, match_name, hash_name, comp_name, FALSE, FALSE, TRUE) -/* REGION */ - -static void -gtk_css_selector_region_print (const GtkCssSelector *selector, - GString *string) -{ - char *region_names[] = { - "even", - "odd", - "first-child", - "last-child", - "only-child", - "sorted" - }; - guint i; - - g_string_append (string, selector->region.name); - - for (i = 0; i < G_N_ELEMENTS (region_names); i++) - { - if (selector->region.flags & (1 << i)) - { - g_string_append_c (string, ':'); - g_string_append (string, region_names[i]); - } - } -} - -static gboolean -gtk_css_selector_region_match_one (const GtkCssSelector *selector, - const GtkCssMatcher *matcher) -{ - return _gtk_css_matcher_has_region (matcher, selector->region.name, selector->region.flags); -} - -static GtkCssChange -gtk_css_selector_region_get_change (const GtkCssSelector *selector, GtkCssChange previous_change) -{ - return previous_change | GTK_CSS_CHANGE_REGION; -} - -static inline guint -count_bits (guint n) -{ -#if defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 5)) - return (guint) __builtin_popcount (n); -#elif defined(__clang__) && (__clang_major__ > 3 || (__clang_major__ == 3 && __clang_minor__ >= 1)) - return (guint) __builtin_popcount (n); -#elif defined(_MSC_VER) && _MSC_VER >= 1500 - return (guint) __popcnt (n); -#else - guint result = 0; - - for (result = 0; n != 0; result++) - n &= n - 1; - - return result; -#endif -} - -static void -gtk_css_selector_region_add_specificity (const GtkCssSelector *selector, - guint *ids, - guint *classes, - guint *elements) -{ - (*elements)++; - - (*classes) += count_bits (selector->region.flags); -} - -static guint -gtk_css_selector_region_hash_one (const GtkCssSelector *a) -{ - return GPOINTER_TO_UINT (a->region.name) ^ a->region.flags; -} - -static int -gtk_css_selector_region_compare_one (const GtkCssSelector *a, - const GtkCssSelector *b) -{ - if (a->region.name < b->region.name) - return -1; - else if (a->region.name > b->region.name) - return 1; - else - return a->region.flags - b->region.flags; -} - -static const GtkCssSelectorClass GTK_CSS_SELECTOR_REGION = { - "region", - gtk_css_selector_region_print, - gtk_css_selector_default_foreach_matcher, - gtk_css_selector_region_match_one, - gtk_css_selector_region_get_change, - gtk_css_selector_region_add_specificity, - gtk_css_selector_region_hash_one, - gtk_css_selector_region_compare_one, - TRUE -}; - /* CLASS */ static void @@ -1317,31 +1159,6 @@ parse_selector_pseudo_class_nth_child (GtkCssParser *parser, return selector; } -static GtkRegionFlags -try_parse_selector_region_pseudo_class (GtkCssParser *parser) -{ - static const struct { - const char *name; - GtkRegionFlags flags; - } region_flags[] = { - { "even", GTK_REGION_EVEN }, - { "odd", GTK_REGION_ODD }, - { "first-child", GTK_REGION_FIRST }, - { "last-child", GTK_REGION_LAST }, - { "only-child", GTK_REGION_ONLY }, - { "sorted", GTK_REGION_SORTED } - }; - guint i; - - for (i = 0; i < G_N_ELEMENTS (region_flags); i++) - { - if (_gtk_css_parser_try (parser, region_flags[i].name, FALSE)) - return region_flags[i].flags; - } - - return 0; -} - static GtkCssSelector * parse_selector_pseudo_class (GtkCssParser *parser, GtkCssSelector *selector, @@ -1458,25 +1275,14 @@ parse_simple_selector (GtkCssParser *parser, GtkCssSelector *selector) { gboolean parsed_something = FALSE; - guint region_offset = 0; char *name; name = _gtk_css_parser_try_ident (parser, FALSE); if (name) { - if (_gtk_style_context_check_region_name (name)) - { - selector = gtk_css_selector_new (>K_CSS_SELECTOR_REGION, - selector); - selector->region.name = g_intern_string (name); - region_offset = gtk_css_selector_size (selector); - } - else - { - selector = gtk_css_selector_new (>K_CSS_SELECTOR_NAME, - selector); - selector->name.reference = get_type_reference (name); - } + selector = gtk_css_selector_new (>K_CSS_SELECTOR_NAME, + selector); + selector->name.reference = get_type_reference (name); g_free (name); parsed_something = TRUE; } @@ -1494,18 +1300,7 @@ parse_simple_selector (GtkCssParser *parser, else if (_gtk_css_parser_try (parser, ":not(", TRUE)) selector = parse_selector_negation (parser, selector); else if (_gtk_css_parser_try (parser, ":", FALSE)) - { - GtkRegionFlags region_flags; - if (region_offset && - (region_flags = try_parse_selector_region_pseudo_class (parser))) - { - selector[gtk_css_selector_size (selector) - region_offset].region.flags |= region_flags; - } - else - { - selector = parse_selector_pseudo_class (parser, selector, FALSE); - } - } + selector = parse_selector_pseudo_class (parser, selector, FALSE); else if (!parsed_something) { _gtk_css_parser_error (parser, "Expected a valid selector"); @@ -1522,16 +1317,6 @@ parse_simple_selector (GtkCssParser *parser, _gtk_css_parser_skip_whitespace (parser); - /* This is the big region hack where we change the descendant matcher - * to a version that respects regions. - */ - if (selector) - { - if ((selector[0].class == >K_CSS_SELECTOR_ANY || selector[0].class == >K_CSS_SELECTOR_REGION) - && selector[1].class == >K_CSS_SELECTOR_DESCENDANT) - selector[1].class = >K_CSS_SELECTOR_DESCENDANT_FOR_REGION; - } - return selector; }