matcher->node.classes = gtk_css_node_declaration_get_classes (gtk_css_node_get_declaration (node),
&matcher->node.n_classes);
}
-
-/* GTK_CSS_MATCHER_ANY */
-
-static gboolean
-gtk_css_matcher_any_get_parent (GtkCssMatcher *matcher,
- const GtkCssMatcher *child)
-{
- _gtk_css_matcher_any_init (matcher);
-
- return TRUE;
-}
-
-static gboolean
-gtk_css_matcher_any_get_previous (GtkCssMatcher *matcher,
- const GtkCssMatcher *next)
-{
- _gtk_css_matcher_any_init (matcher);
-
- return TRUE;
-}
-
-static gboolean
-gtk_css_matcher_any_has_state (const GtkCssMatcher *matcher,
- GtkStateFlags state)
-{
- return TRUE;
-}
-
-static gboolean
-gtk_css_matcher_any_has_name (const GtkCssMatcher *matcher,
- /*interned*/ const char *name)
-{
- return TRUE;
-}
-
-static gboolean
-gtk_css_matcher_any_has_class (const GtkCssMatcher *matcher,
- GQuark class_name)
-{
- return TRUE;
-}
-
-static gboolean
-gtk_css_matcher_any_has_id (const GtkCssMatcher *matcher,
- const char *id)
-{
- return TRUE;
-}
-
-static gboolean
-gtk_css_matcher_any_has_position (const GtkCssMatcher *matcher,
- gboolean forward,
- int a,
- int b)
-{
- return TRUE;
-}
-
-static void
-gtk_css_matcher_any_print (const GtkCssMatcher *matcher,
- GString *string)
-{
- g_string_append (string, "ANY");
-}
-
-static const GtkCssMatcherClass GTK_CSS_MATCHER_ANY = {
- GTK_CSS_MATCHER_TYPE_ANY,
- gtk_css_matcher_any_get_parent,
- gtk_css_matcher_any_get_previous,
- gtk_css_matcher_any_has_state,
- gtk_css_matcher_any_has_name,
- gtk_css_matcher_any_has_class,
- gtk_css_matcher_any_has_id,
- gtk_css_matcher_any_has_position,
- gtk_css_matcher_any_print
-};
-
-void
-_gtk_css_matcher_any_init (GtkCssMatcher *matcher)
-{
- matcher->klass = >K_CSS_MATCHER_ANY;
-}
-
-/* GTK_CSS_MATCHER_SUPERSET */
-
-static gboolean
-gtk_css_matcher_superset_get_parent (GtkCssMatcher *matcher,
- const GtkCssMatcher *child)
-{
- _gtk_css_matcher_any_init (matcher);
-
- return TRUE;
-}
-
-static gboolean
-gtk_css_matcher_superset_get_previous (GtkCssMatcher *matcher,
- const GtkCssMatcher *next)
-{
- _gtk_css_matcher_any_init (matcher);
-
- return TRUE;
-}
-
-static gboolean
-gtk_css_matcher_superset_has_state (const GtkCssMatcher *matcher,
- GtkStateFlags state)
-{
- return TRUE;
-}
-
-static gboolean
-gtk_css_matcher_superset_has_name (const GtkCssMatcher *matcher,
- /*interned*/ const char *name)
-{
- return _gtk_css_matcher_has_name (matcher->superset.subset, name);
-}
-
-static gboolean
-gtk_css_matcher_superset_has_class (const GtkCssMatcher *matcher,
- GQuark class_name)
-{
- return _gtk_css_matcher_has_class (matcher->superset.subset, class_name);
-}
-
-static gboolean
-gtk_css_matcher_superset_has_id (const GtkCssMatcher *matcher,
- const char *id)
-{
- return _gtk_css_matcher_has_id (matcher->superset.subset, id);
-}
-
-static gboolean
-gtk_css_matcher_superset_has_position (const GtkCssMatcher *matcher,
- gboolean forward,
- int a,
- int b)
-{
- return TRUE;
-}
-
-static void
-gtk_css_matcher_superset_print (const GtkCssMatcher *matcher,
- GString *string)
-{
- g_string_append (string, "SUPERSET(");
- gtk_css_matcher_print (matcher->superset.subset, string);
- g_string_append (string, ")");
-}
-
-static const GtkCssMatcherClass GTK_CSS_MATCHER_SUPERSET = {
- GTK_CSS_MATCHER_TYPE_SUPERSET,
- gtk_css_matcher_superset_get_parent,
- gtk_css_matcher_superset_get_previous,
- gtk_css_matcher_superset_has_state,
- gtk_css_matcher_superset_has_name,
- gtk_css_matcher_superset_has_class,
- gtk_css_matcher_superset_has_id,
- gtk_css_matcher_superset_has_position,
- gtk_css_matcher_superset_print
-};
-
-void
-_gtk_css_matcher_superset_init (GtkCssMatcher *matcher,
- const GtkCssMatcher *subset)
-{
- g_return_if_fail (subset != NULL);
-
- matcher->superset.klass = >K_CSS_MATCHER_SUPERSET;
- matcher->superset.subset = subset;
-}
typedef enum {
GTK_CSS_MATCHER_TYPE_NODE,
- GTK_CSS_MATCHER_TYPE_WIDGET_PATH,
- GTK_CSS_MATCHER_TYPE_ANY,
- GTK_CSS_MATCHER_TYPE_SUPERSET
+ GTK_CSS_MATCHER_TYPE_WIDGET_PATH
} GtkCssMatcherType;
struct _GtkCssMatcherClass {
guint n_classes;
};
-struct _GtkCssMatcherSuperset {
- const GtkCssMatcherClass *klass;
- const GtkCssMatcher *subset;
-};
-
union _GtkCssMatcher {
const GtkCssMatcherClass *klass;
GtkCssMatcherWidgetPath path;
GtkCssMatcherNode node;
- GtkCssMatcherSuperset superset;
};
gboolean _gtk_css_matcher_init (GtkCssMatcher *matcher,
const GtkCssNodeDeclaration *decl) G_GNUC_WARN_UNUSED_RESULT;
void _gtk_css_matcher_node_init (GtkCssMatcher *matcher,
GtkCssNode *node);
-void _gtk_css_matcher_any_init (GtkCssMatcher *matcher);
-void _gtk_css_matcher_superset_init (GtkCssMatcher *matcher,
- const GtkCssMatcher *subset);
void gtk_css_matcher_print (const GtkCssMatcher *matcher,
GString *string);
return matcher->klass->has_position (matcher, forward, a, b);
}
-static inline gboolean
-_gtk_css_matcher_matches_any (const GtkCssMatcher *matcher)
-{
- return matcher->klass->type == GTK_CSS_MATCHER_TYPE_ANY;
-}
-
G_END_DECLS
#endif /* __GTK_CSS_MATCHER_PRIVATE_H__ */