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 union _GtkCssMatcher GtkCssMatcher;
27 typedef struct _GtkCssNode GtkCssNode;
28 typedef struct _GtkCssNodeDeclaration GtkCssNodeDeclaration;
29 typedef struct _GtkCssStyle GtkCssStyle;
30 typedef struct _GtkStyleProviderPrivate GtkStyleProviderPrivate; /* dummy typedef */
31 
32 #define GTK_CSS_CHANGE_CLASS                          (1ULL <<  0)
33 #define GTK_CSS_CHANGE_NAME                           (1ULL <<  1)
34 #define GTK_CSS_CHANGE_ID                             (1ULL <<  2)
35 #define GTK_CSS_CHANGE_FIRST_CHILD                    (1ULL <<  3)
36 #define GTK_CSS_CHANGE_LAST_CHILD                     (1ULL <<  4)
37 #define GTK_CSS_CHANGE_NTH_CHILD                      (1ULL <<  5)
38 #define GTK_CSS_CHANGE_NTH_LAST_CHILD                 (1ULL <<  6)
39 #define GTK_CSS_CHANGE_STATE                          (1ULL <<  7)
40 #define GTK_CSS_CHANGE_SIBLING_CLASS                  (1ULL <<  8)
41 #define GTK_CSS_CHANGE_SIBLING_NAME                   (1ULL <<  9)
42 #define GTK_CSS_CHANGE_SIBLING_ID                     (1ULL << 10)
43 #define GTK_CSS_CHANGE_SIBLING_FIRST_CHILD            (1ULL << 11)
44 #define GTK_CSS_CHANGE_SIBLING_LAST_CHILD             (1ULL << 12)
45 #define GTK_CSS_CHANGE_SIBLING_NTH_CHILD              (1ULL << 13)
46 #define GTK_CSS_CHANGE_SIBLING_NTH_LAST_CHILD         (1ULL << 14)
47 #define GTK_CSS_CHANGE_SIBLING_STATE                  (1ULL << 15)
48 #define GTK_CSS_CHANGE_PARENT_CLASS                   (1ULL << 16)
49 #define GTK_CSS_CHANGE_PARENT_NAME                    (1ULL << 17)
50 #define GTK_CSS_CHANGE_PARENT_ID                      (1ULL << 18)
51 #define GTK_CSS_CHANGE_PARENT_FIRST_CHILD             (1ULL << 19)
52 #define GTK_CSS_CHANGE_PARENT_LAST_CHILD              (1ULL << 20)
53 #define GTK_CSS_CHANGE_PARENT_NTH_CHILD               (1ULL << 21)
54 #define GTK_CSS_CHANGE_PARENT_NTH_LAST_CHILD          (1ULL << 22)
55 #define GTK_CSS_CHANGE_PARENT_STATE                   (1ULL << 23)
56 #define GTK_CSS_CHANGE_PARENT_SIBLING_CLASS           (1ULL << 24)
57 #define GTK_CSS_CHANGE_PARENT_SIBLING_ID              (1ULL << 25)
58 #define GTK_CSS_CHANGE_PARENT_SIBLING_NAME            (1ULL << 26)
59 #define GTK_CSS_CHANGE_PARENT_SIBLING_FIRST_CHILD     (1ULL << 27)
60 #define GTK_CSS_CHANGE_PARENT_SIBLING_LAST_CHILD      (1ULL << 28)
61 #define GTK_CSS_CHANGE_PARENT_SIBLING_NTH_CHILD       (1ULL << 29)
62 #define GTK_CSS_CHANGE_PARENT_SIBLING_NTH_LAST_CHILD  (1ULL << 30)
63 #define GTK_CSS_CHANGE_PARENT_SIBLING_STATE           (1ULL << 31)
64 
65 /* add more */
66 #define GTK_CSS_CHANGE_SOURCE                         (1ULL << 32)
67 #define GTK_CSS_CHANGE_PARENT_STYLE                   (1ULL << 33)
68 #define GTK_CSS_CHANGE_TIMESTAMP                      (1ULL << 34)
69 #define GTK_CSS_CHANGE_ANIMATIONS                     (1ULL << 35)
70 
71 #define GTK_CSS_CHANGE_RESERVED_BIT                   (1ULL << 62) /* Used internally in gtkcssselector.c */
72 
73 typedef guint64 GtkCssChange;
74 
75 #define GTK_CSS_CHANGE_POSITION (GTK_CSS_CHANGE_FIRST_CHILD | GTK_CSS_CHANGE_LAST_CHILD | \
76                                  GTK_CSS_CHANGE_NTH_CHILD | GTK_CSS_CHANGE_NTH_LAST_CHILD)
77 #define GTK_CSS_CHANGE_SIBLING_POSITION (GTK_CSS_CHANGE_SIBLING_FIRST_CHILD | GTK_CSS_CHANGE_SIBLING_LAST_CHILD | \
78                                          GTK_CSS_CHANGE_SIBLING_NTH_CHILD | GTK_CSS_CHANGE_SIBLING_NTH_LAST_CHILD)
79 #define GTK_CSS_CHANGE_PARENT_POSITION (GTK_CSS_CHANGE_PARENT_FIRST_CHILD | GTK_CSS_CHANGE_PARENT_LAST_CHILD | \
80                                         GTK_CSS_CHANGE_PARENT_NTH_CHILD | GTK_CSS_CHANGE_PARENT_NTH_LAST_CHILD)
81 #define GTK_CSS_CHANGE_PARENT_SIBLING_POSITION (GTK_CSS_CHANGE_PARENT_SIBLING_FIRST_CHILD | GTK_CSS_CHANGE_PARENT_SIBLING_LAST_CHILD | \
82                                                 GTK_CSS_CHANGE_PARENT_SIBLING_NTH_CHILD | GTK_CSS_CHANGE_PARENT_SIBLING_NTH_LAST_CHILD)
83 
84 
85 #define GTK_CSS_CHANGE_ANY ((1 << 19) - 1)
86 #define GTK_CSS_CHANGE_ANY_SELF (GTK_CSS_CHANGE_CLASS | GTK_CSS_CHANGE_NAME | GTK_CSS_CHANGE_ID | GTK_CSS_CHANGE_POSITION | GTK_CSS_CHANGE_STATE)
87 #define GTK_CSS_CHANGE_ANY_SIBLING (GTK_CSS_CHANGE_SIBLING_CLASS | GTK_CSS_CHANGE_SIBLING_NAME | \
88                                     GTK_CSS_CHANGE_SIBLING_ID | \
89                                     GTK_CSS_CHANGE_SIBLING_POSITION | GTK_CSS_CHANGE_SIBLING_STATE)
90 #define GTK_CSS_CHANGE_ANY_PARENT (GTK_CSS_CHANGE_PARENT_CLASS | GTK_CSS_CHANGE_PARENT_SIBLING_CLASS | \
91                                    GTK_CSS_CHANGE_PARENT_NAME | GTK_CSS_CHANGE_PARENT_SIBLING_NAME | \
92                                    GTK_CSS_CHANGE_PARENT_ID | GTK_CSS_CHANGE_PARENT_SIBLING_ID | \
93                                    GTK_CSS_CHANGE_PARENT_POSITION | GTK_CSS_CHANGE_PARENT_SIBLING_POSITION | \
94                                    GTK_CSS_CHANGE_PARENT_STATE | GTK_CSS_CHANGE_PARENT_SIBLING_STATE)
95 
96 /*
97  * GtkCssAffects:
98  * @GTK_CSS_AFFECTS_FOREGROUND: The foreground rendering is affected.
99  *   This does not include things that affect the font. For those,
100  *   see @GTK_CSS_AFFECTS_FONT.
101  * @GTK_CSS_AFFECTS_BACKGROUND: The background rendering is affected.
102  * @GTK_CSS_AFFECTS_BORDER: The border styling is affected.
103  * @GTK_CSS_AFFECTS_PANGO_LAYOUT: Font rendering is affected.
104  * @GTK_CSS_AFFECTS_FONT: The font is affected and should be reloaded
105  *   if it was cached.
106  * @GTK_CSS_AFFECTS_TEXT: Text rendering is affected.
107  * @GTK_CSS_AFFECTS_TEXT_ATTRS: Text attributes are affected.
108  * @GTK_CSS_AFFECTS_ICON: Fullcolor icons and their rendering is affected.
109  * @GTK_CSS_AFFECTS_SYMBOLIC_ICON: Symbolic icons and their rendering is affected.
110  * @GTK_CSS_AFFECTS_OUTLINE: The outline styling is affected. Outlines
111  *   only affect elements that can be focused.
112  * @GTK_CSS_AFFECTS_CLIP: Changes in this property may have an effect
113  *   on the clipping area of the element. Changes in these properties
114  *   should cause a reevaluation of the element's clip area.
115  * @GTK_CSS_AFFECTS_SIZE: Changes in this property may have an effect
116  *   on the allocated size of the element. Changes in these properties
117  *   should cause a recomputation of the element's allocated size.
118  *
119  * The generic effects that a CSS property can have. If a value is
120  * set, then the property will have an influence on that feature.
121  *
122  * Note that multiple values can be set.
123  */
124 typedef enum {
125   GTK_CSS_AFFECTS_FOREGROUND = (1 << 0),
126   GTK_CSS_AFFECTS_BACKGROUND = (1 << 1),
127   GTK_CSS_AFFECTS_BORDER = (1 << 2),
128   GTK_CSS_AFFECTS_FONT = (1 << 3),
129   GTK_CSS_AFFECTS_TEXT = (1 << 4),
130   GTK_CSS_AFFECTS_TEXT_ATTRS = (1 << 5),
131   GTK_CSS_AFFECTS_ICON = (1 << 6),
132   GTK_CSS_AFFECTS_SYMBOLIC_ICON = (1 << 7),
133   GTK_CSS_AFFECTS_OUTLINE = (1 << 8),
134   GTK_CSS_AFFECTS_CLIP = (1 << 9),
135   GTK_CSS_AFFECTS_SIZE = (1 << 10)
136 } GtkCssAffects;
137 
138 #define GTK_CSS_AFFECTS_REDRAW (GTK_CSS_AFFECTS_FOREGROUND |    \
139                                 GTK_CSS_AFFECTS_BACKGROUND |    \
140                                 GTK_CSS_AFFECTS_BORDER |        \
141                                 GTK_CSS_AFFECTS_ICON |          \
142                                 GTK_CSS_AFFECTS_SYMBOLIC_ICON | \
143                                 GTK_CSS_AFFECTS_OUTLINE)
144 
145 enum { /*< skip >*/
146   GTK_CSS_PROPERTY_COLOR,
147   GTK_CSS_PROPERTY_DPI,
148   GTK_CSS_PROPERTY_FONT_SIZE,
149   GTK_CSS_PROPERTY_ICON_THEME,
150   GTK_CSS_PROPERTY_ICON_PALETTE,
151   GTK_CSS_PROPERTY_BACKGROUND_COLOR,
152   GTK_CSS_PROPERTY_FONT_FAMILY,
153   GTK_CSS_PROPERTY_FONT_STYLE,
154   GTK_CSS_PROPERTY_FONT_VARIANT,
155   GTK_CSS_PROPERTY_FONT_WEIGHT,
156   GTK_CSS_PROPERTY_FONT_STRETCH,
157   GTK_CSS_PROPERTY_LETTER_SPACING,
158   GTK_CSS_PROPERTY_TEXT_DECORATION_LINE,
159   GTK_CSS_PROPERTY_TEXT_DECORATION_COLOR,
160   GTK_CSS_PROPERTY_TEXT_DECORATION_STYLE,
161   GTK_CSS_PROPERTY_TEXT_SHADOW,
162   GTK_CSS_PROPERTY_BOX_SHADOW,
163   GTK_CSS_PROPERTY_MARGIN_TOP,
164   GTK_CSS_PROPERTY_MARGIN_LEFT,
165   GTK_CSS_PROPERTY_MARGIN_BOTTOM,
166   GTK_CSS_PROPERTY_MARGIN_RIGHT,
167   GTK_CSS_PROPERTY_PADDING_TOP,
168   GTK_CSS_PROPERTY_PADDING_LEFT,
169   GTK_CSS_PROPERTY_PADDING_BOTTOM,
170   GTK_CSS_PROPERTY_PADDING_RIGHT,
171   GTK_CSS_PROPERTY_BORDER_TOP_STYLE,
172   GTK_CSS_PROPERTY_BORDER_TOP_WIDTH,
173   GTK_CSS_PROPERTY_BORDER_LEFT_STYLE,
174   GTK_CSS_PROPERTY_BORDER_LEFT_WIDTH,
175   GTK_CSS_PROPERTY_BORDER_BOTTOM_STYLE,
176   GTK_CSS_PROPERTY_BORDER_BOTTOM_WIDTH,
177   GTK_CSS_PROPERTY_BORDER_RIGHT_STYLE,
178   GTK_CSS_PROPERTY_BORDER_RIGHT_WIDTH,
179   GTK_CSS_PROPERTY_BORDER_TOP_LEFT_RADIUS,
180   GTK_CSS_PROPERTY_BORDER_TOP_RIGHT_RADIUS,
181   GTK_CSS_PROPERTY_BORDER_BOTTOM_RIGHT_RADIUS,
182   GTK_CSS_PROPERTY_BORDER_BOTTOM_LEFT_RADIUS,
183   GTK_CSS_PROPERTY_OUTLINE_STYLE,
184   GTK_CSS_PROPERTY_OUTLINE_WIDTH,
185   GTK_CSS_PROPERTY_OUTLINE_OFFSET,
186   GTK_CSS_PROPERTY_OUTLINE_TOP_LEFT_RADIUS,
187   GTK_CSS_PROPERTY_OUTLINE_TOP_RIGHT_RADIUS,
188   GTK_CSS_PROPERTY_OUTLINE_BOTTOM_RIGHT_RADIUS,
189   GTK_CSS_PROPERTY_OUTLINE_BOTTOM_LEFT_RADIUS,
190   GTK_CSS_PROPERTY_BACKGROUND_CLIP,
191   GTK_CSS_PROPERTY_BACKGROUND_ORIGIN,
192   GTK_CSS_PROPERTY_BACKGROUND_SIZE,
193   GTK_CSS_PROPERTY_BACKGROUND_POSITION,
194   GTK_CSS_PROPERTY_BORDER_TOP_COLOR,
195   GTK_CSS_PROPERTY_BORDER_RIGHT_COLOR,
196   GTK_CSS_PROPERTY_BORDER_BOTTOM_COLOR,
197   GTK_CSS_PROPERTY_BORDER_LEFT_COLOR,
198   GTK_CSS_PROPERTY_OUTLINE_COLOR,
199   GTK_CSS_PROPERTY_BACKGROUND_REPEAT,
200   GTK_CSS_PROPERTY_BACKGROUND_IMAGE,
201   GTK_CSS_PROPERTY_BACKGROUND_BLEND_MODE,
202   GTK_CSS_PROPERTY_BORDER_IMAGE_SOURCE,
203   GTK_CSS_PROPERTY_BORDER_IMAGE_REPEAT,
204   GTK_CSS_PROPERTY_BORDER_IMAGE_SLICE,
205   GTK_CSS_PROPERTY_BORDER_IMAGE_WIDTH,
206   GTK_CSS_PROPERTY_ICON_SOURCE,
207   GTK_CSS_PROPERTY_ICON_SHADOW,
208   GTK_CSS_PROPERTY_ICON_STYLE,
209   GTK_CSS_PROPERTY_ICON_TRANSFORM,
210   GTK_CSS_PROPERTY_MIN_WIDTH,
211   GTK_CSS_PROPERTY_MIN_HEIGHT,
212   GTK_CSS_PROPERTY_TRANSITION_PROPERTY,
213   GTK_CSS_PROPERTY_TRANSITION_DURATION,
214   GTK_CSS_PROPERTY_TRANSITION_TIMING_FUNCTION,
215   GTK_CSS_PROPERTY_TRANSITION_DELAY,
216   GTK_CSS_PROPERTY_ANIMATION_NAME,
217   GTK_CSS_PROPERTY_ANIMATION_DURATION,
218   GTK_CSS_PROPERTY_ANIMATION_TIMING_FUNCTION,
219   GTK_CSS_PROPERTY_ANIMATION_ITERATION_COUNT,
220   GTK_CSS_PROPERTY_ANIMATION_DIRECTION,
221   GTK_CSS_PROPERTY_ANIMATION_PLAY_STATE,
222   GTK_CSS_PROPERTY_ANIMATION_DELAY,
223   GTK_CSS_PROPERTY_ANIMATION_FILL_MODE,
224   GTK_CSS_PROPERTY_OPACITY,
225   GTK_CSS_PROPERTY_ICON_EFFECT,
226   GTK_CSS_PROPERTY_ENGINE,
227   GTK_CSS_PROPERTY_GTK_KEY_BINDINGS,
228   GTK_CSS_PROPERTY_CARET_COLOR,
229   GTK_CSS_PROPERTY_SECONDARY_CARET_COLOR,
230   GTK_CSS_PROPERTY_FONT_FEATURE_SETTINGS,
231   /* add more */
232   GTK_CSS_PROPERTY_N_PROPERTIES
233 };
234 
235 typedef enum /*< skip >*/ {
236   GTK_CSS_BLEND_MODE_COLOR,
237   GTK_CSS_BLEND_MODE_COLOR_BURN,
238   GTK_CSS_BLEND_MODE_COLOR_DODGE,
239   GTK_CSS_BLEND_MODE_DARKEN,
240   GTK_CSS_BLEND_MODE_DIFFERENCE,
241   GTK_CSS_BLEND_MODE_EXCLUSION,
242   GTK_CSS_BLEND_MODE_HARD_LIGHT,
243   GTK_CSS_BLEND_MODE_HUE,
244   GTK_CSS_BLEND_MODE_LIGHTEN,
245   GTK_CSS_BLEND_MODE_LUMINOSITY,
246   GTK_CSS_BLEND_MODE_MULTIPLY,
247   GTK_CSS_BLEND_MODE_NORMAL,
248   GTK_CSS_BLEND_MODE_OVERLAY,
249   GTK_CSS_BLEND_MODE_SATURATE,
250   GTK_CSS_BLEND_MODE_SCREEN,
251   GTK_CSS_BLEND_MODE_SOFT_LIGHT
252 } GtkCssBlendMode;
253 
254 typedef enum /*< skip >*/ {
255   GTK_CSS_IMAGE_BUILTIN_NONE,
256   GTK_CSS_IMAGE_BUILTIN_CHECK,
257   GTK_CSS_IMAGE_BUILTIN_CHECK_INCONSISTENT,
258   GTK_CSS_IMAGE_BUILTIN_OPTION,
259   GTK_CSS_IMAGE_BUILTIN_OPTION_INCONSISTENT,
260   GTK_CSS_IMAGE_BUILTIN_ARROW_UP,
261   GTK_CSS_IMAGE_BUILTIN_ARROW_DOWN,
262   GTK_CSS_IMAGE_BUILTIN_ARROW_LEFT,
263   GTK_CSS_IMAGE_BUILTIN_ARROW_RIGHT,
264   GTK_CSS_IMAGE_BUILTIN_EXPANDER_HORIZONTAL_LEFT,
265   GTK_CSS_IMAGE_BUILTIN_EXPANDER_VERTICAL_LEFT,
266   GTK_CSS_IMAGE_BUILTIN_EXPANDER_HORIZONTAL_RIGHT,
267   GTK_CSS_IMAGE_BUILTIN_EXPANDER_VERTICAL_RIGHT,
268   GTK_CSS_IMAGE_BUILTIN_EXPANDER_HORIZONTAL_LEFT_EXPANDED,
269   GTK_CSS_IMAGE_BUILTIN_EXPANDER_VERTICAL_LEFT_EXPANDED,
270   GTK_CSS_IMAGE_BUILTIN_EXPANDER_HORIZONTAL_RIGHT_EXPANDED,
271   GTK_CSS_IMAGE_BUILTIN_EXPANDER_VERTICAL_RIGHT_EXPANDED,
272   GTK_CSS_IMAGE_BUILTIN_GRIP_TOPLEFT,
273   GTK_CSS_IMAGE_BUILTIN_GRIP_TOP,
274   GTK_CSS_IMAGE_BUILTIN_GRIP_TOPRIGHT,
275   GTK_CSS_IMAGE_BUILTIN_GRIP_RIGHT,
276   GTK_CSS_IMAGE_BUILTIN_GRIP_BOTTOMRIGHT,
277   GTK_CSS_IMAGE_BUILTIN_GRIP_BOTTOM,
278   GTK_CSS_IMAGE_BUILTIN_GRIP_BOTTOMLEFT,
279   GTK_CSS_IMAGE_BUILTIN_GRIP_LEFT,
280   GTK_CSS_IMAGE_BUILTIN_PANE_SEPARATOR,
281   GTK_CSS_IMAGE_BUILTIN_HANDLE,
282   GTK_CSS_IMAGE_BUILTIN_SPINNER
283 } GtkCssImageBuiltinType;
284 
285 typedef enum /*< skip >*/ {
286   GTK_CSS_AREA_BORDER_BOX,
287   GTK_CSS_AREA_PADDING_BOX,
288   GTK_CSS_AREA_CONTENT_BOX
289 } GtkCssArea;
290 
291 typedef enum /*< skip >*/ {
292   GTK_CSS_DIRECTION_NORMAL,
293   GTK_CSS_DIRECTION_REVERSE,
294   GTK_CSS_DIRECTION_ALTERNATE,
295   GTK_CSS_DIRECTION_ALTERNATE_REVERSE
296 } GtkCssDirection;
297 
298 typedef enum /*< skip >*/ {
299   GTK_CSS_PLAY_STATE_RUNNING,
300   GTK_CSS_PLAY_STATE_PAUSED
301 } GtkCssPlayState;
302 
303 typedef enum /*< skip >*/ {
304   GTK_CSS_FILL_NONE,
305   GTK_CSS_FILL_FORWARDS,
306   GTK_CSS_FILL_BACKWARDS,
307   GTK_CSS_FILL_BOTH
308 } GtkCssFillMode;
309 
310 typedef enum /*< skip >*/ {
311   GTK_CSS_ICON_EFFECT_NONE,
312   GTK_CSS_ICON_EFFECT_HIGHLIGHT,
313   GTK_CSS_ICON_EFFECT_DIM
314 } GtkCssIconEffect;
315 
316 typedef enum /*< skip >*/ {
317   GTK_CSS_ICON_STYLE_REQUESTED,
318   GTK_CSS_ICON_STYLE_REGULAR,
319   GTK_CSS_ICON_STYLE_SYMBOLIC
320 } GtkCssIconStyle;
321 
322 typedef enum /*< skip >*/ {
323   /* relative font sizes */
324   GTK_CSS_FONT_SIZE_SMALLER,
325   GTK_CSS_FONT_SIZE_LARGER,
326   /* absolute font sizes */
327   GTK_CSS_FONT_SIZE_XX_SMALL,
328   GTK_CSS_FONT_SIZE_X_SMALL,
329   GTK_CSS_FONT_SIZE_SMALL,
330   GTK_CSS_FONT_SIZE_MEDIUM,
331   GTK_CSS_FONT_SIZE_LARGE,
332   GTK_CSS_FONT_SIZE_X_LARGE,
333   GTK_CSS_FONT_SIZE_XX_LARGE
334 } GtkCssFontSize;
335 
336 typedef enum /*< skip >*/ {
337   GTK_CSS_TEXT_DECORATION_LINE_NONE,
338   GTK_CSS_TEXT_DECORATION_LINE_UNDERLINE,
339   GTK_CSS_TEXT_DECORATION_LINE_LINE_THROUGH
340 } GtkTextDecorationLine;
341 
342 typedef enum /*< skip >*/ {
343   GTK_CSS_TEXT_DECORATION_STYLE_SOLID,
344   GTK_CSS_TEXT_DECORATION_STYLE_DOUBLE,
345   GTK_CSS_TEXT_DECORATION_STYLE_WAVY
346 } GtkTextDecorationStyle;
347 
348 /* for the order in arrays */
349 typedef enum /*< skip >*/ {
350   GTK_CSS_TOP,
351   GTK_CSS_RIGHT,
352   GTK_CSS_BOTTOM,
353   GTK_CSS_LEFT
354 } GtkCssSide;
355 
356 typedef enum /*< skip >*/ {
357   GTK_CSS_TOP_LEFT,
358   GTK_CSS_TOP_RIGHT,
359   GTK_CSS_BOTTOM_RIGHT,
360   GTK_CSS_BOTTOM_LEFT
361 } GtkCssCorner;
362 
363 typedef enum /*< skip >*/ {
364   GTK_CSS_DIMENSION_PERCENTAGE,
365   GTK_CSS_DIMENSION_NUMBER,
366   GTK_CSS_DIMENSION_LENGTH,
367   GTK_CSS_DIMENSION_ANGLE,
368   GTK_CSS_DIMENSION_TIME
369 } GtkCssDimension;
370 
371 typedef enum /*< skip >*/ {
372   /* CSS term: <number> */
373   GTK_CSS_NUMBER,
374   /* CSS term: <percentage> */
375   GTK_CSS_PERCENT,
376   /* CSS term: <length> */
377   GTK_CSS_PX,
378   GTK_CSS_PT,
379   GTK_CSS_EM,
380   GTK_CSS_EX,
381   GTK_CSS_REM,
382   GTK_CSS_PC,
383   GTK_CSS_IN,
384   GTK_CSS_CM,
385   GTK_CSS_MM,
386   /* CSS term: <angle> */
387   GTK_CSS_RAD,
388   GTK_CSS_DEG,
389   GTK_CSS_GRAD,
390   GTK_CSS_TURN,
391   /* CSS term: <time> */
392   GTK_CSS_S,
393   GTK_CSS_MS,
394 } GtkCssUnit;
395 
396 cairo_operator_t        _gtk_css_blend_mode_get_operator         (GtkCssBlendMode    mode);
397 
398 GtkCssChange            _gtk_css_change_for_sibling              (GtkCssChange       match);
399 GtkCssChange            _gtk_css_change_for_child                (GtkCssChange       match);
400 
401 GtkCssDimension         gtk_css_unit_get_dimension               (GtkCssUnit         unit);
402 
403 char *                  gtk_css_change_to_string                 (GtkCssChange       change);
404 void                    gtk_css_change_print                     (GtkCssChange       change,
405                                                                   GString           *string);
406 
407 /* for lack of better place to put it */
408 /* mirror what cairo does */
409 #define gtk_rgba_is_clear(rgba) ((rgba)->alpha < ((double)0x00ff / (double)0xffff))
410 
411 G_END_DECLS
412 
413 #endif /* __GTK_CSS_TYPES_PRIVATE_H__ */
414