1 /* GTK - The GIMP Toolkit
2 * Copyright (C) 2012 Benjamin Otte <otte@gnome.org>
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2 of the License, or (at your option) any later version.
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library. If not, see <http://www.gnu.org/licenses/>.
18 #ifndef __GTK_CSS_MATCHER_PRIVATE_H__
19 #define __GTK_CSS_MATCHER_PRIVATE_H__
21 #include <gtk/gtkenums.h>
22 #include <gtk/gtktypes.h>
23 #include "gtk/gtkcsstypesprivate.h"
27 typedef union _GtkCssMatcher GtkCssMatcher;
28 typedef struct _GtkCssMatcherSuperset GtkCssMatcherSuperset;
29 typedef struct _GtkCssMatcherWidgetPath GtkCssMatcherWidgetPath;
30 typedef struct _GtkCssMatcherClass GtkCssMatcherClass;
32 struct _GtkCssMatcherClass {
33 gboolean (* get_parent) (GtkCssMatcher *matcher,
34 const GtkCssMatcher *child);
35 gboolean (* get_previous) (GtkCssMatcher *matcher,
36 const GtkCssMatcher *next);
38 GtkStateFlags (* get_state) (const GtkCssMatcher *matcher);
39 gboolean (* has_name) (const GtkCssMatcher *matcher,
41 gboolean (* has_class) (const GtkCssMatcher *matcher,
42 const char *class_name);
43 gboolean (* has_id) (const GtkCssMatcher *matcher,
45 gboolean (* has_regions) (const GtkCssMatcher *matcher);
46 gboolean (* has_region) (const GtkCssMatcher *matcher,
48 GtkRegionFlags flags);
49 gboolean (* has_position) (const GtkCssMatcher *matcher,
55 struct _GtkCssMatcherWidgetPath {
56 const GtkCssMatcherClass *klass;
57 const GtkWidgetPath *path;
58 GtkStateFlags state_flags;
63 struct _GtkCssMatcherSuperset {
64 const GtkCssMatcherClass *klass;
65 const GtkCssMatcher *subset;
66 GtkCssChange relevant;
69 union _GtkCssMatcher {
70 const GtkCssMatcherClass *klass;
71 GtkCssMatcherWidgetPath path;
72 GtkCssMatcherSuperset superset;
75 void _gtk_css_matcher_init (GtkCssMatcher *matcher,
76 const GtkWidgetPath *path,
78 void _gtk_css_matcher_any_init (GtkCssMatcher *matcher);
79 void _gtk_css_matcher_superset_init (GtkCssMatcher *matcher,
80 const GtkCssMatcher *subset,
81 GtkCssChange relevant);
84 static inline gboolean
85 _gtk_css_matcher_get_parent (GtkCssMatcher *matcher,
86 const GtkCssMatcher *child)
88 return child->klass->get_parent (matcher, child);
91 static inline gboolean
92 _gtk_css_matcher_get_previous (GtkCssMatcher *matcher,
93 const GtkCssMatcher *next)
95 return next->klass->get_previous (matcher, next);
98 static inline GtkStateFlags
99 _gtk_css_matcher_get_state (const GtkCssMatcher *matcher)
101 return matcher->klass->get_state (matcher);
104 static inline gboolean
105 _gtk_css_matcher_has_name (const GtkCssMatcher *matcher,
108 return matcher->klass->has_name (matcher, name);
111 static inline gboolean
112 _gtk_css_matcher_has_class (const GtkCssMatcher *matcher,
113 const char *class_name)
115 return matcher->klass->has_class (matcher, class_name);
118 static inline gboolean
119 _gtk_css_matcher_has_id (const GtkCssMatcher *matcher,
122 return matcher->klass->has_id (matcher, id);
126 static inline gboolean
127 _gtk_css_matcher_has_regions (const GtkCssMatcher *matcher)
129 return matcher->klass->has_regions (matcher);
132 static inline gboolean
133 _gtk_css_matcher_has_region (const GtkCssMatcher *matcher,
135 GtkRegionFlags flags)
137 return matcher->klass->has_region (matcher, region, flags);
141 _gtk_css_matcher_has_position (const GtkCssMatcher *matcher,
146 return matcher->klass->has_position (matcher, forward, a, b);
152 #endif /* __GTK_CSS_MATCHER_PRIVATE_H__ */