From daefb12a230d814630f999a948e57426ecd275df Mon Sep 17 00:00:00 2001 From: Alexander Larsson Date: Wed, 28 Nov 2012 11:15:53 +0100 Subject: css: Add GtkCssSelectorTree creation and matching From a set of GtkCssSelectors and the rulesets they match to we create a large decision tree that lets us efficitently match against all the rules and return the set of matched rulesets. The tree is created such that at each level we pick the initial rule[1] in all the considered selectors for that level and use put the one that is in most selectors in the node. All selectors matching that are put in the previous part of the tree. --- gtk/gtkcssselectorprivate.h | 14 ++++++++++++++ 1 file changed, 14 insertions(+) (limited to 'gtk/gtkcssselectorprivate.h') diff --git a/gtk/gtkcssselectorprivate.h b/gtk/gtkcssselectorprivate.h index 5c12c6df86..e4c09976d5 100644 --- a/gtk/gtkcssselectorprivate.h +++ b/gtk/gtkcssselectorprivate.h @@ -24,6 +24,8 @@ G_BEGIN_DECLS typedef struct _GtkCssSelector GtkCssSelector; +typedef struct _GtkCssSelectorTree GtkCssSelectorTree; +typedef struct _GtkCssSelectorTreeBuilder GtkCssSelectorTreeBuilder; GtkCssSelector * _gtk_css_selector_parse (GtkCssParser *parser); void _gtk_css_selector_free (GtkCssSelector *selector); @@ -38,6 +40,18 @@ gboolean _gtk_css_selector_matches (const GtkCssSelector *sel int _gtk_css_selector_compare (const GtkCssSelector *a, const GtkCssSelector *b); + +void _gtk_css_selector_tree_free (GtkCssSelectorTree *tree); +GPtrArray *_gtk_css_selector_tree_match_all (GtkCssSelectorTree *tree, + const GtkCssMatcher *matcher); + +GtkCssSelectorTreeBuilder *_gtk_css_selector_tree_builder_new (void); +void _gtk_css_selector_tree_builder_add (GtkCssSelectorTreeBuilder *builder, + GtkCssSelector *selectors, + gpointer match); +GtkCssSelectorTree * _gtk_css_selector_tree_builder_build (GtkCssSelectorTreeBuilder *builder); +void _gtk_css_selector_tree_builder_free (GtkCssSelectorTreeBuilder *builder); + G_END_DECLS #endif /* __GTK_CSS_SELECTOR_PRIVATE_H__ */ -- cgit v1.2.1