/* GTK - The GIMP Toolkit * Copyright (C) 2012 Benjamin Otte * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library. If not, see . */ #ifndef __GTK_CSS_MATCHER_PRIVATE_H__ #define __GTK_CSS_MATCHER_PRIVATE_H__ #include #include #include "gtk/gtkcsstypesprivate.h" G_BEGIN_DECLS typedef struct _GtkCssMatcherNode GtkCssMatcherNode; typedef struct _GtkCssMatcherSuperset GtkCssMatcherSuperset; typedef struct _GtkCssMatcherWidgetPath GtkCssMatcherWidgetPath; typedef struct _GtkCssMatcherClass GtkCssMatcherClass; struct _GtkCssMatcherClass { gboolean (* get_parent) (GtkCssMatcher *matcher, const GtkCssMatcher *child); gboolean (* get_previous) (GtkCssMatcher *matcher, const GtkCssMatcher *next); GtkStateFlags (* get_state) (const GtkCssMatcher *matcher); gboolean (* has_name) (const GtkCssMatcher *matcher, /*interned*/const char*name); gboolean (* has_class) (const GtkCssMatcher *matcher, GQuark class_name); gboolean (* has_id) (const GtkCssMatcher *matcher, const char *id); gboolean (* has_position) (const GtkCssMatcher *matcher, gboolean forward, int a, int b); gboolean is_any; }; struct _GtkCssMatcherWidgetPath { const GtkCssMatcherClass *klass; const GtkCssNodeDeclaration *decl; const GtkWidgetPath *path; guint index; guint sibling_index; }; struct _GtkCssMatcherNode { const GtkCssMatcherClass *klass; GtkCssNode *node; GtkStateFlags node_state; const char *node_name; const char *node_id; const GQuark *classes; guint n_classes; }; struct _GtkCssMatcherSuperset { const GtkCssMatcherClass *klass; const GtkCssMatcher *subset; GtkCssChange relevant; }; union _GtkCssMatcher { const GtkCssMatcherClass *klass; GtkCssMatcherWidgetPath path; GtkCssMatcherNode node; GtkCssMatcherSuperset superset; }; gboolean _gtk_css_matcher_init (GtkCssMatcher *matcher, const GtkWidgetPath *path, 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, GtkCssChange relevant); 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, /*interned*/ const char *name) { return matcher->klass->has_name (matcher, name); } static inline gboolean _gtk_css_matcher_has_class (const GtkCssMatcher *matcher, GQuark 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 guint _gtk_css_matcher_has_position (const GtkCssMatcher *matcher, gboolean forward, int a, int b) { return matcher->klass->has_position (matcher, forward, a, b); } static inline gboolean _gtk_css_matcher_matches_any (const GtkCssMatcher *matcher) { return matcher->klass->is_any; } G_END_DECLS #endif /* __GTK_CSS_MATCHER_PRIVATE_H__ */