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/gtkcssmatcherprivate.h | |
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/gtkcssmatcherprivate.h')
-rw-r--r-- | gtk/gtkcssmatcherprivate.h | 115 |
1 files changed, 94 insertions, 21 deletions
diff --git a/gtk/gtkcssmatcherprivate.h b/gtk/gtkcssmatcherprivate.h index 704de5332c..83eff0e5b3 100644 --- a/gtk/gtkcssmatcherprivate.h +++ b/gtk/gtkcssmatcherprivate.h @@ -24,36 +24,109 @@ G_BEGIN_DECLS typedef struct _GtkCssMatcher GtkCssMatcher; +typedef struct _GtkCssMatcherClass GtkCssMatcherClass; -struct _GtkCssMatcher { - const GtkWidgetPath *path; - GtkStateFlags state_flags; - guint index; - guint sibling_index; -}; - -void _gtk_css_matcher_init (GtkCssMatcher *matcher, - const GtkWidgetPath *path, - GtkStateFlags state); -gboolean _gtk_css_matcher_get_parent (GtkCssMatcher *matcher, +struct _GtkCssMatcherClass { + gboolean (* get_parent) (GtkCssMatcher *matcher, const GtkCssMatcher *child); -gboolean _gtk_css_matcher_get_previous (GtkCssMatcher *matcher, + gboolean (* get_previous) (GtkCssMatcher *matcher, const GtkCssMatcher *next); -GtkStateFlags _gtk_css_matcher_get_state (const GtkCssMatcher *matcher); -gboolean _gtk_css_matcher_has_name (const GtkCssMatcher *matcher, + GtkStateFlags (* get_state) (const GtkCssMatcher *matcher); + gboolean (* has_name) (const GtkCssMatcher *matcher, const char *name); -gboolean _gtk_css_matcher_has_class (const GtkCssMatcher *matcher, + gboolean (* has_class) (const GtkCssMatcher *matcher, const char *class_name); -gboolean _gtk_css_matcher_has_id (const GtkCssMatcher *matcher, + gboolean (* has_id) (const GtkCssMatcher *matcher, const char *id); -gboolean _gtk_css_matcher_has_regions (const GtkCssMatcher *matcher); -gboolean _gtk_css_matcher_has_region (const GtkCssMatcher *matcher, + gboolean (* has_regions) (const GtkCssMatcher *matcher); + gboolean (* has_region) (const GtkCssMatcher *matcher, const char *region, GtkRegionFlags flags); -guint _gtk_css_matcher_get_sibling_index - (const GtkCssMatcher *matcher); -guint _gtk_css_matcher_get_n_siblings (const GtkCssMatcher *matcher); + guint (* get_sibling_index) (const GtkCssMatcher *matcher); + guint (* get_n_siblings) (const GtkCssMatcher *matcher); +}; + +struct _GtkCssMatcher { + const GtkCssMatcherClass *klass; + const GtkWidgetPath *path; + GtkStateFlags state_flags; + guint index; + guint sibling_index; +}; + +void _gtk_css_matcher_init (GtkCssMatcher *matcher, + const GtkWidgetPath *path, + GtkStateFlags state); + +static inline gboolean +_gtk_css_matcher_get_parent (GtkCssMatcher *matcher, + const GtkCssMatcher *child) +{ + return child->klass->get_parent (matcher, child); +} + +static inline gboolean +_gtk_css_matcher_get_previous (GtkCssMatcher *matcher, + const GtkCssMatcher *next) +{ + return next->klass->get_previous (matcher, next); +} + +static inline GtkStateFlags +_gtk_css_matcher_get_state (const GtkCssMatcher *matcher) +{ + return matcher->klass->get_state (matcher); +} + +static inline gboolean +_gtk_css_matcher_has_name (const GtkCssMatcher *matcher, + const char *name) +{ + return matcher->klass->has_name (matcher, name); +} + +static inline gboolean +_gtk_css_matcher_has_class (const GtkCssMatcher *matcher, + const char *class_name) +{ + return matcher->klass->has_class (matcher, class_name); +} + +static inline gboolean +_gtk_css_matcher_has_id (const GtkCssMatcher *matcher, + const char *id) +{ + return matcher->klass->has_id (matcher, id); +} + + +static inline gboolean +_gtk_css_matcher_has_regions (const GtkCssMatcher *matcher) +{ + return matcher->klass->has_regions (matcher); +} + +static inline gboolean +_gtk_css_matcher_has_region (const GtkCssMatcher *matcher, + const char *region, + GtkRegionFlags flags) +{ + return matcher->klass->has_region (matcher, region, flags); +} + +static inline guint +_gtk_css_matcher_get_sibling_index (const GtkCssMatcher *matcher) +{ + return matcher->klass->get_sibling_index (matcher); +} + +static inline guint +_gtk_css_matcher_get_n_siblings (const GtkCssMatcher *matcher) +{ + return matcher->klass->get_n_siblings (matcher); +} + G_END_DECLS |