1 /*
2  * Copyright © 2015 Red Hat Inc.
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.1 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  * Authors: Benjamin Otte <otte@gnome.org>
18  */
19 
20 #ifndef __GTK_CSS_GADGET_PRIVATE_H__
21 #define __GTK_CSS_GADGET_PRIVATE_H__
22 
23 #include <cairo.h>
24 #include <glib-object.h>
25 
26 #include "gtk/gtkwidget.h"
27 #include "gtk/gtkcssstylechangeprivate.h"
28 #include "gtk/gtkcsstypesprivate.h"
29 
30 G_BEGIN_DECLS
31 
32 #define GTK_TYPE_CSS_GADGET           (gtk_css_gadget_get_type ())
33 #define GTK_CSS_GADGET(obj)           (G_TYPE_CHECK_INSTANCE_CAST (obj, GTK_TYPE_CSS_GADGET, GtkCssGadget))
34 #define GTK_CSS_GADGET_CLASS(cls)     (G_TYPE_CHECK_CLASS_CAST (cls, GTK_TYPE_CSS_GADGET, GtkCssGadgetClass))
35 #define GTK_IS_CSS_GADGET(obj)        (G_TYPE_CHECK_INSTANCE_TYPE (obj, GTK_TYPE_CSS_GADGET))
36 #define GTK_IS_CSS_GADGET_CLASS(obj)  (G_TYPE_CHECK_CLASS_TYPE (obj, GTK_TYPE_CSS_GADGET))
37 #define GTK_CSS_GADGET_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GTK_TYPE_CSS_GADGET, GtkCssGadgetClass))
38 
39 typedef struct _GtkCssGadget           GtkCssGadget;
40 typedef struct _GtkCssGadgetClass      GtkCssGadgetClass;
41 
42 struct _GtkCssGadget
43 {
44   GObject parent;
45 };
46 
47 struct _GtkCssGadgetClass
48 {
49   GObjectClass  parent_class;
50 
51   void          (* get_preferred_size)                  (GtkCssGadget           *gadget,
52                                                          GtkOrientation          orientation,
53                                                          gint                    for_size,
54                                                          gint                   *minimum,
55                                                          gint                   *natural,
56                                                          gint                   *minimum_baseline,
57                                                          gint                   *natural_baseline);
58 
59   void          (* allocate)                            (GtkCssGadget           *gadget,
60                                                          const GtkAllocation    *allocation,
61                                                          int                     baseline,
62                                                          GtkAllocation          *out_clip);
63 
64   gboolean      (* draw)                                (GtkCssGadget           *gadget,
65                                                          cairo_t                *cr,
66                                                          int                     x,
67                                                          int                     y,
68                                                          int                     width,
69                                                          int                     height);
70 
71   void          (* style_changed)                       (GtkCssGadget           *gadget,
72                                                          GtkCssStyleChange      *change);
73 };
74 
75 GType           gtk_css_gadget_get_type                 (void) G_GNUC_CONST;
76 
77 GtkCssNode *    gtk_css_gadget_get_node                 (GtkCssGadget           *gadget);
78 GtkCssStyle *   gtk_css_gadget_get_style                (GtkCssGadget           *gadget);
79 GtkWidget *     gtk_css_gadget_get_owner                (GtkCssGadget           *gadget);
80 
81 void            gtk_css_gadget_set_node                 (GtkCssGadget           *gadget,
82                                                          GtkCssNode             *node);
83 void            gtk_css_gadget_set_visible              (GtkCssGadget           *gadget,
84                                                          gboolean                visible);
85 gboolean        gtk_css_gadget_get_visible              (GtkCssGadget           *gadget);
86 
87 gboolean        gtk_css_gadget_margin_box_contains_point (GtkCssGadget          *gadget,
88                                                           int                    x,
89                                                           int                    y);
90 gboolean        gtk_css_gadget_border_box_contains_point (GtkCssGadget          *gadget,
91                                                           int                    x,
92                                                           int                    y);
93 gboolean        gtk_css_gadget_content_box_contains_point (GtkCssGadget         *gadget,
94                                                            int                   x,
95                                                            int                   y);
96 void            gtk_css_gadget_get_margin_box           (GtkCssGadget           *gadget,
97                                                          GtkAllocation          *box);
98 void            gtk_css_gadget_get_border_box           (GtkCssGadget           *gadget,
99                                                          GtkAllocation          *box);
100 void            gtk_css_gadget_get_content_box          (GtkCssGadget           *gadget,
101                                                          GtkAllocation          *box);
102 
103 void            gtk_css_gadget_add_class                (GtkCssGadget           *gadget,
104                                                          const char             *name);
105 void            gtk_css_gadget_remove_class             (GtkCssGadget           *gadget,
106                                                          const char             *name);
107 void            gtk_css_gadget_set_state                (GtkCssGadget           *gadget,
108                                                          GtkStateFlags           state);
109 void            gtk_css_gadget_add_state                (GtkCssGadget           *gadget,
110                                                          GtkStateFlags           state);
111 void            gtk_css_gadget_remove_state             (GtkCssGadget           *gadget,
112                                                          GtkStateFlags           state);
113 
114 void            gtk_css_gadget_get_preferred_size       (GtkCssGadget           *gadget,
115                                                          GtkOrientation          orientation,
116                                                          gint                    for_size,
117                                                          gint                   *minimum,
118                                                          gint                   *natural,
119                                                          gint                   *minimum_baseline,
120                                                          gint                   *natural_baseline);
121 void            gtk_css_gadget_allocate                 (GtkCssGadget           *gadget,
122                                                          const GtkAllocation    *allocation,
123                                                          int                     baseline,
124                                                          GtkAllocation          *out_clip);
125 void            gtk_css_gadget_draw                     (GtkCssGadget           *gadget,
126                                                          cairo_t                *cr);
127 
128 void            gtk_css_gadget_queue_resize             (GtkCssGadget           *gadget);
129 void            gtk_css_gadget_queue_allocate           (GtkCssGadget           *gadget);
130 void            gtk_css_gadget_queue_draw               (GtkCssGadget           *gadget);
131 
132 void            gtk_css_gadget_get_margin_allocation    (GtkCssGadget           *gadget,
133                                                          GtkAllocation          *allocation,
134                                                          int                    *baseline);
135 void            gtk_css_gadget_get_border_allocation    (GtkCssGadget           *gadget,
136                                                          GtkAllocation          *allocation,
137                                                          int                    *baseline);
138 void            gtk_css_gadget_get_content_allocation   (GtkCssGadget           *gadget,
139                                                          GtkAllocation          *allocation,
140                                                          int                    *baseline);
141 
142 G_END_DECLS
143 
144 #endif /* __GTK_CSS_GADGET_PRIVATE_H__ */
145