]> Pileus Git - ~andy/gtk/blob - gtk/gtkcssmatcherprivate.h
matcher: Add a superset matcher
[~andy/gtk] / gtk / gtkcssmatcherprivate.h
1 /* GTK - The GIMP Toolkit
2  * Copyright (C) 2012 Benjamin Otte <otte@gnome.org>
3  *
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.
8  *
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.
13  *
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/>.
16  */
17
18 #ifndef __GTK_CSS_MATCHER_PRIVATE_H__
19 #define __GTK_CSS_MATCHER_PRIVATE_H__
20
21 #include <gtk/gtkenums.h>
22 #include <gtk/gtktypes.h>
23 #include "gtk/gtkcsstypesprivate.h"
24
25 G_BEGIN_DECLS
26
27 typedef union _GtkCssMatcher GtkCssMatcher;
28 typedef struct _GtkCssMatcherSuperset GtkCssMatcherSuperset;
29 typedef struct _GtkCssMatcherWidgetPath GtkCssMatcherWidgetPath;
30 typedef struct _GtkCssMatcherClass GtkCssMatcherClass;
31
32 struct _GtkCssMatcherClass {
33   gboolean        (* get_parent)                  (GtkCssMatcher          *matcher,
34                                                    const GtkCssMatcher    *child);
35   gboolean        (* get_previous)                (GtkCssMatcher          *matcher,
36                                                    const GtkCssMatcher    *next);
37
38   GtkStateFlags   (* get_state)                   (const GtkCssMatcher   *matcher);
39   gboolean        (* has_name)                    (const GtkCssMatcher   *matcher,
40                                                    const char            *name);
41   gboolean        (* has_class)                   (const GtkCssMatcher   *matcher,
42                                                    const char            *class_name);
43   gboolean        (* has_id)                      (const GtkCssMatcher   *matcher,
44                                                    const char            *id);
45   gboolean        (* has_regions)                 (const GtkCssMatcher   *matcher);
46   gboolean        (* has_region)                  (const GtkCssMatcher   *matcher,
47                                                    const char            *region,
48                                                    GtkRegionFlags         flags);
49   gboolean        (* has_position)                (const GtkCssMatcher   *matcher,
50                                                    gboolean               forward,
51                                                    int                    a,
52                                                    int                    b);
53 };
54
55 struct _GtkCssMatcherWidgetPath {
56   const GtkCssMatcherClass *klass;
57   const GtkWidgetPath      *path;
58   GtkStateFlags             state_flags;
59   guint                     index;
60   guint                     sibling_index;
61 };
62
63 struct _GtkCssMatcherSuperset {
64   const GtkCssMatcherClass *klass;
65   const GtkCssMatcher      *subset;
66   GtkCssChange              relevant;
67 };
68
69 union _GtkCssMatcher {
70   const GtkCssMatcherClass *klass;
71   GtkCssMatcherWidgetPath   path;
72   GtkCssMatcherSuperset     superset;
73 };
74
75 void              _gtk_css_matcher_init           (GtkCssMatcher          *matcher,
76                                                    const GtkWidgetPath    *path,
77                                                    GtkStateFlags           state);
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);
82
83
84 static inline gboolean
85 _gtk_css_matcher_get_parent (GtkCssMatcher       *matcher,
86                              const GtkCssMatcher *child)
87 {
88   return child->klass->get_parent (matcher, child);
89 }
90
91 static inline gboolean
92 _gtk_css_matcher_get_previous (GtkCssMatcher       *matcher,
93                                const GtkCssMatcher *next)
94 {
95   return next->klass->get_previous (matcher, next);
96 }
97
98 static inline GtkStateFlags
99 _gtk_css_matcher_get_state (const GtkCssMatcher *matcher)
100 {
101   return matcher->klass->get_state (matcher);
102 }
103
104 static inline gboolean
105 _gtk_css_matcher_has_name (const GtkCssMatcher *matcher,
106                            const char          *name)
107 {
108   return matcher->klass->has_name (matcher, name);
109 }
110
111 static inline gboolean
112 _gtk_css_matcher_has_class (const GtkCssMatcher *matcher,
113                             const char          *class_name)
114 {
115   return matcher->klass->has_class (matcher, class_name);
116 }
117
118 static inline gboolean
119 _gtk_css_matcher_has_id (const GtkCssMatcher *matcher,
120                          const char          *id)
121 {
122   return matcher->klass->has_id (matcher, id);
123 }
124
125
126 static inline gboolean
127 _gtk_css_matcher_has_regions (const GtkCssMatcher *matcher)
128 {
129   return matcher->klass->has_regions (matcher);
130 }
131
132 static inline gboolean
133 _gtk_css_matcher_has_region (const GtkCssMatcher *matcher,
134                              const char          *region,
135                              GtkRegionFlags       flags)
136 {
137   return matcher->klass->has_region (matcher, region, flags);
138 }
139
140 static inline guint
141 _gtk_css_matcher_has_position (const GtkCssMatcher *matcher,
142                                gboolean             forward,
143                                int                  a,
144                                int                  b)
145 {
146   return matcher->klass->has_position (matcher, forward, a, b);
147 }
148
149
150 G_END_DECLS
151
152 #endif /* __GTK_CSS_MATCHER_PRIVATE_H__ */