]> Pileus Git - ~andy/gtk/blob - gtk/gtkcsstypesprivate.h
c064b863eb00cbd381553b4e3d059b0ec62198cc
[~andy/gtk] / gtk / gtkcsstypesprivate.h
1 /* GTK - The GIMP Toolkit
2  * Copyright (C) 2011 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_TYPES_PRIVATE_H__
19 #define __GTK_CSS_TYPES_PRIVATE_H__
20
21 #include <glib-object.h>
22 #include <gtk/gtkstylecontext.h>
23
24 G_BEGIN_DECLS
25
26 typedef enum { /*< skip >*/
27   GTK_CSS_CHANGE_CLASS                    = (1 <<  0),
28   GTK_CSS_CHANGE_NAME                     = (1 <<  1),
29   GTK_CSS_CHANGE_ID                       = GTK_CSS_CHANGE_NAME,
30   GTK_CSS_CHANGE_REGION                   = GTK_CSS_CHANGE_NAME,
31   GTK_CSS_CHANGE_POSITION                 = (1 <<  2),
32   GTK_CSS_CHANGE_STATE                    = (1 <<  3),
33   GTK_CSS_CHANGE_SIBLING_CLASS            = (1 <<  4),
34   GTK_CSS_CHANGE_SIBLING_NAME             = (1 <<  5),
35   GTK_CSS_CHANGE_SIBLING_POSITION         = (1 <<  6),
36   GTK_CSS_CHANGE_SIBLING_STATE            = (1 <<  7),
37   GTK_CSS_CHANGE_PARENT_CLASS             = (1 <<  8),
38   GTK_CSS_CHANGE_PARENT_NAME              = (1 <<  9),
39   GTK_CSS_CHANGE_PARENT_POSITION          = (1 << 10),
40   GTK_CSS_CHANGE_PARENT_STATE             = (1 << 11),
41   GTK_CSS_CHANGE_PARENT_SIBLING_CLASS     = (1 << 12),
42   GTK_CSS_CHANGE_PARENT_SIBLING_NAME      = (1 << 13),
43   GTK_CSS_CHANGE_PARENT_SIBLING_POSITION  = (1 << 14),
44   GTK_CSS_CHANGE_PARENT_SIBLING_STATE     = (1 << 15),
45   /* add more */
46 } GtkCssChange;
47
48 #define GTK_CSS_CHANGE_ANY ((1 << 16) - 1)
49 #define GTK_CSS_CHANGE_ANY_SELF (GTK_CSS_CHANGE_CLASS | GTK_CSS_CHANGE_NAME | GTK_CSS_CHANGE_POSITION | GTK_CSS_CHANGE_STATE)
50 #define GTK_CSS_CHANGE_ANY_SIBLING (GTK_CSS_CHANGE_SIBLING_CLASS | GTK_CSS_CHANGE_SIBLING_NAME | \
51                                     GTK_CSS_CHANGE_SIBLING_POSITION | GTK_CSS_CHANGE_SIBLING_STATE)
52 #define GTK_CSS_CHANGE_ANY_PARENT (GTK_CSS_CHANGE_PARENT_CLASS | GTK_CSS_CHANGE_PARENT_SIBLING_CLASS | \
53                                    GTK_CSS_CHANGE_PARENT_NAME | GTK_CSS_CHANGE_PARENT_SIBLING_NAME | \
54                                    GTK_CSS_CHANGE_PARENT_POSITION | GTK_CSS_CHANGE_PARENT_SIBLING_POSITION | \
55                                    GTK_CSS_CHANGE_PARENT_STATE | GTK_CSS_CHANGE_PARENT_SIBLING_STATE)
56
57 typedef enum {
58   GTK_CSS_INHERIT,
59   GTK_CSS_INITIAL
60 } GtkCssSpecialValue;
61
62 /* We encode horizontal and vertical repeat in one enum value.
63  * This eases parsing and storage, but you need to be aware that
64  * you have to "unpack" this value.
65  */
66 #define GTK_CSS_BACKGROUND_REPEAT_SHIFT (8)
67 #define GTK_CSS_BACKGROUND_REPEAT_MASK ((1 << GTK_CSS_BACKGROUND_REPEAT_SHIFT) - 1)
68 #define GTK_CSS_BACKGROUND_HORIZONTAL(repeat) ((repeat) & GTK_CSS_BACKGROUND_REPEAT_MASK)
69 #define GTK_CSS_BACKGROUND_VERTICAL(repeat) (((repeat) >> GTK_CSS_BACKGROUND_REPEAT_SHIFT) & GTK_CSS_BACKGROUND_REPEAT_MASK)
70 typedef enum /*< enum >*/
71 {
72   GTK_CSS_BACKGROUND_INVALID, /*< skip >*/
73   GTK_CSS_BACKGROUND_REPEAT, /* start at one so we know if a value has been set */
74   GTK_CSS_BACKGROUND_SPACE,
75   GTK_CSS_BACKGROUND_ROUND,
76   GTK_CSS_BACKGROUND_NO_REPEAT,
77   /* need to hardcode the numer or glib-mkenums makes us into a flags type */
78   GTK_CSS_BACKGROUND_REPEAT_X = 1025,
79   GTK_CSS_BACKGROUND_REPEAT_Y = 260
80 } GtkCssBackgroundRepeat;
81
82 typedef enum {
83   GTK_CSS_REPEAT_STYLE_STRETCH,
84   GTK_CSS_REPEAT_STYLE_REPEAT,
85   GTK_CSS_REPEAT_STYLE_ROUND,
86   GTK_CSS_REPEAT_STYLE_SPACE
87 } GtkCssBorderRepeatStyle;
88
89 typedef enum {
90   GTK_CSS_AREA_BORDER_BOX,
91   GTK_CSS_AREA_PADDING_BOX,
92   GTK_CSS_AREA_CONTENT_BOX
93 } GtkCssArea;
94
95 /* for the order in arrays */
96 typedef enum /*< skip >*/ {
97   GTK_CSS_TOP,
98   GTK_CSS_RIGHT,
99   GTK_CSS_BOTTOM,
100   GTK_CSS_LEFT
101 } GtkCssSide;
102
103 typedef enum /*< skip >*/ {
104   GTK_CSS_TOP_LEFT,
105   GTK_CSS_TOP_RIGHT,
106   GTK_CSS_BOTTOM_RIGHT,
107   GTK_CSS_BOTTOM_LEFT
108 } GtkCssCorner;
109
110 typedef enum /*< skip >*/ {
111   /* CSS term: <number> */
112   GTK_CSS_NUMBER,
113   /* CSS term: <percentage> */
114   GTK_CSS_PERCENT,
115   /* CSS term: <length> */
116   GTK_CSS_PX,
117   GTK_CSS_PT,
118   GTK_CSS_EM,
119   GTK_CSS_EX,
120   GTK_CSS_PC,
121   GTK_CSS_IN,
122   GTK_CSS_CM,
123   GTK_CSS_MM,
124   /* CSS term: <angle> */
125   GTK_CSS_RAD,
126   GTK_CSS_DEG,
127   GTK_CSS_GRAD,
128   GTK_CSS_TURN
129 } GtkCssUnit;
130
131 typedef struct _GtkCssNumber GtkCssNumber;
132 typedef struct _GtkCssBackgroundSize GtkCssBackgroundSize;
133 typedef struct _GtkCssBackgroundPosition GtkCssBackgroundPosition;
134 typedef struct _GtkCssBorderCornerRadius GtkCssBorderCornerRadius;
135 typedef struct _GtkCssBorderImageRepeat GtkCssBorderImageRepeat;
136
137 struct _GtkCssNumber {
138   gdouble        value;
139   GtkCssUnit     unit;
140 };
141
142 struct _GtkCssBackgroundSize {
143   GtkCssNumber width;  /* 0 means auto here */
144   GtkCssNumber height; /* 0 means auto here */
145   guint cover :1;
146   guint contain :1;
147 };
148
149 struct _GtkCssBackgroundPosition {
150   GtkCssNumber x;
151   GtkCssNumber y;
152 };
153
154 struct _GtkCssBorderCornerRadius {
155   GtkCssNumber horizontal;
156   GtkCssNumber vertical;
157 };
158
159 struct _GtkCssBorderImageRepeat {
160   GtkCssBorderRepeatStyle vrepeat;
161   GtkCssBorderRepeatStyle hrepeat;
162 };
163
164 #define GTK_TYPE_CSS_BACKGROUND_SIZE _gtk_css_background_size_get_type ()
165 #define GTK_TYPE_CSS_BACKGROUND_POSITION _gtk_css_background_position_get_type ()
166 #define GTK_TYPE_CSS_BORDER_CORNER_RADIUS _gtk_css_border_corner_radius_get_type ()
167 #define GTK_TYPE_CSS_BORDER_IMAGE_REPEAT _gtk_css_border_image_repeat_get_type ()
168 #define GTK_TYPE_CSS_NUMBER _gtk_css_number_get_type ()
169
170 GType           _gtk_css_background_size_get_type               (void);
171 GType           _gtk_css_background_position_get_type           (void);
172 GType           _gtk_css_border_corner_radius_get_type          (void);
173 GType           _gtk_css_border_image_repeat_get_type           (void);
174 GType           _gtk_css_number_get_type                        (void);
175
176 GtkCssChange    _gtk_css_change_for_sibling                      (GtkCssChange       match);
177 GtkCssChange    _gtk_css_change_for_child                        (GtkCssChange       match);
178
179 #define GTK_CSS_NUMBER_INIT(_value,_unit) { (_value), (_unit) }
180 void            _gtk_css_number_init                            (GtkCssNumber       *number,
181                                                                  double              value,
182                                                                  GtkCssUnit          unit);
183 gboolean        _gtk_css_number_equal                           (const GtkCssNumber *one,
184                                                                  const GtkCssNumber *two);
185 double          _gtk_css_number_get                             (const GtkCssNumber *number,
186                                                                  double              one_hundred_percent);
187 gboolean        _gtk_css_number_compute                         (GtkCssNumber       *dest,
188                                                                  const GtkCssNumber *src,
189                                                                  GtkStyleContext    *context);
190 void            _gtk_css_number_print                           (const GtkCssNumber *number,
191                                                                  GString            *string);
192
193
194 G_END_DECLS
195
196 #endif /* __GTK_CSS_TYPES_PRIVATE_H__ */