diff options
author | Benjamin Otte <otte@redhat.com> | 2012-03-17 14:28:07 +0100 |
---|---|---|
committer | Benjamin Otte <otte@redhat.com> | 2012-04-17 08:59:07 +0200 |
commit | b368c5f10aecc3c6fb9f0a09e9eaace3fd1c95dc (patch) | |
tree | 80555a8860f06d77fbe9fed398e7841bec33a8c4 /gtk/gtkcssmatcher.c | |
parent | a94b85d37592cb9119216cd9f4820e27edfe5e15 (diff) | |
download | gtk+-b368c5f10aecc3c6fb9f0a09e9eaace3fd1c95dc.tar.gz |
matcher: Use a vtable
Now we can do lots of fancy matchers, yay!
Diffstat (limited to 'gtk/gtkcssmatcher.c')
-rw-r--r-- | gtk/gtkcssmatcher.c | 92 |
1 files changed, 54 insertions, 38 deletions
diff --git a/gtk/gtkcssmatcher.c b/gtk/gtkcssmatcher.c index c12403ecd8..e796cfcee2 100644 --- a/gtk/gtkcssmatcher.c +++ b/gtk/gtkcssmatcher.c @@ -21,24 +21,14 @@ #include "gtkwidgetpath.h" -void -_gtk_css_matcher_init (GtkCssMatcher *matcher, - const GtkWidgetPath *path, - GtkStateFlags state) -{ - matcher->path = path; - matcher->state_flags = state; - matcher->index = gtk_widget_path_length (path) - 1; - matcher->sibling_index = gtk_widget_path_iter_get_sibling_index (path, matcher->index); -} - -gboolean -_gtk_css_matcher_get_parent (GtkCssMatcher *matcher, - const GtkCssMatcher *child) +static gboolean +gtk_css_matcher_widget_path_get_parent (GtkCssMatcher *matcher, + const GtkCssMatcher *child) { if (child->index == 0) return FALSE; + matcher->klass = child->klass; matcher->path = child->path; matcher->state_flags = 0; matcher->index = child->index - 1; @@ -47,13 +37,14 @@ _gtk_css_matcher_get_parent (GtkCssMatcher *matcher, return TRUE; } -gboolean -_gtk_css_matcher_get_previous (GtkCssMatcher *matcher, - const GtkCssMatcher *next) +static gboolean +gtk_css_matcher_widget_path_get_previous (GtkCssMatcher *matcher, + const GtkCssMatcher *next) { if (next->sibling_index == 0) return FALSE; + matcher->klass = next->klass; matcher->path = next->path; matcher->state_flags = 0; matcher->index = next->index; @@ -62,15 +53,15 @@ _gtk_css_matcher_get_previous (GtkCssMatcher *matcher, return TRUE; } -GtkStateFlags -_gtk_css_matcher_get_state (const GtkCssMatcher *matcher) +static GtkStateFlags +gtk_css_matcher_widget_path_get_state (const GtkCssMatcher *matcher) { return matcher->state_flags; } -gboolean -_gtk_css_matcher_has_name (const GtkCssMatcher *matcher, - const char *name) +static gboolean +gtk_css_matcher_widget_path_has_name (const GtkCssMatcher *matcher, + const char *name) { const GtkWidgetPath *siblings; GType type; @@ -83,9 +74,9 @@ _gtk_css_matcher_has_name (const GtkCssMatcher *matcher, return g_type_is_a (gtk_widget_path_iter_get_object_type (matcher->path, matcher->index), type); } -gboolean -_gtk_css_matcher_has_class (const GtkCssMatcher *matcher, - const char *class_name) +static gboolean +gtk_css_matcher_widget_path_has_class (const GtkCssMatcher *matcher, + const char *class_name) { const GtkWidgetPath *siblings; @@ -96,9 +87,9 @@ _gtk_css_matcher_has_class (const GtkCssMatcher *matcher, return gtk_widget_path_iter_has_class (matcher->path, matcher->index, class_name); } -gboolean -_gtk_css_matcher_has_id (const GtkCssMatcher *matcher, - const char *id) +static gboolean +gtk_css_matcher_widget_path_has_id (const GtkCssMatcher *matcher, + const char *id) { const GtkWidgetPath *siblings; @@ -109,8 +100,8 @@ _gtk_css_matcher_has_id (const GtkCssMatcher *matcher, return gtk_widget_path_iter_has_name (matcher->path, matcher->index, id); } -gboolean -_gtk_css_matcher_has_regions (const GtkCssMatcher *matcher) +static gboolean +gtk_css_matcher_widget_path_has_regions (const GtkCssMatcher *matcher) { const GtkWidgetPath *siblings; GSList *regions; @@ -127,10 +118,10 @@ _gtk_css_matcher_has_regions (const GtkCssMatcher *matcher) return result; } -gboolean -_gtk_css_matcher_has_region (const GtkCssMatcher *matcher, - const char *region, - GtkRegionFlags flags) +static gboolean +gtk_css_matcher_widget_path_has_region (const GtkCssMatcher *matcher, + const char *region, + GtkRegionFlags flags) { const GtkWidgetPath *siblings; GtkRegionFlags region_flags; @@ -153,14 +144,14 @@ _gtk_css_matcher_has_region (const GtkCssMatcher *matcher, return TRUE; } -guint -_gtk_css_matcher_get_sibling_index (const GtkCssMatcher *matcher) +static guint +gtk_css_matcher_widget_path_get_sibling_index (const GtkCssMatcher *matcher) { return matcher->sibling_index; } -guint -_gtk_css_matcher_get_n_siblings (const GtkCssMatcher *matcher) +static guint +gtk_css_matcher_widget_path_get_n_siblings (const GtkCssMatcher *matcher) { const GtkWidgetPath *siblings; @@ -171,3 +162,28 @@ _gtk_css_matcher_get_n_siblings (const GtkCssMatcher *matcher) return gtk_widget_path_length (siblings); } +static const GtkCssMatcherClass GTK_CSS_MATCHER_WIDGET_PATH = { + gtk_css_matcher_widget_path_get_parent, + gtk_css_matcher_widget_path_get_previous, + gtk_css_matcher_widget_path_get_state, + gtk_css_matcher_widget_path_has_name, + gtk_css_matcher_widget_path_has_class, + gtk_css_matcher_widget_path_has_id, + gtk_css_matcher_widget_path_has_regions, + gtk_css_matcher_widget_path_has_region, + gtk_css_matcher_widget_path_get_sibling_index, + gtk_css_matcher_widget_path_get_n_siblings +}; + +void +_gtk_css_matcher_init (GtkCssMatcher *matcher, + const GtkWidgetPath *path, + GtkStateFlags state) +{ + matcher->klass = >K_CSS_MATCHER_WIDGET_PATH; + matcher->path = path; + matcher->state_flags = state; + matcher->index = gtk_widget_path_length (path) - 1; + matcher->sibling_index = gtk_widget_path_iter_get_sibling_index (path, matcher->index); +} + |