1 /* GTK - The GIMP Toolkit
2 * Copyright (C) 2011 Benjamin Otte <otte@gnome.org>
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.
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.
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/>.
18 #ifndef __GTK_CSS_TYPES_PRIVATE_H__
19 #define __GTK_CSS_TYPES_PRIVATE_H__
21 #include <glib-object.h>
22 #include <gtk/gtkstylecontext.h>
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),
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)
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.
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 >*/
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;
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;
90 GTK_CSS_AREA_BORDER_BOX,
91 GTK_CSS_AREA_PADDING_BOX,
92 GTK_CSS_AREA_CONTENT_BOX
95 /* for the order in arrays */
96 typedef enum /*< skip >*/ {
103 typedef enum /*< skip >*/ {
106 GTK_CSS_BOTTOM_RIGHT,
110 typedef enum /*< skip >*/ {
111 /* CSS term: <number> */
113 /* CSS term: <percentage> */
115 /* CSS term: <length> */
124 /* CSS term: <angle> */
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;
137 struct _GtkCssNumber {
142 struct _GtkCssBackgroundSize {
143 GtkCssNumber width; /* 0 means auto here */
144 GtkCssNumber height; /* 0 means auto here */
149 struct _GtkCssBackgroundPosition {
154 struct _GtkCssBorderCornerRadius {
155 GtkCssNumber horizontal;
156 GtkCssNumber vertical;
159 struct _GtkCssBorderImageRepeat {
160 GtkCssBorderRepeatStyle vrepeat;
161 GtkCssBorderRepeatStyle hrepeat;
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 ()
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);
176 GtkCssChange _gtk_css_change_for_sibling (GtkCssChange match);
177 GtkCssChange _gtk_css_change_for_child (GtkCssChange match);
179 #define GTK_CSS_NUMBER_INIT(_value,_unit) { (_value), (_unit) }
180 void _gtk_css_number_init (GtkCssNumber *number,
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,
196 #endif /* __GTK_CSS_TYPES_PRIVATE_H__ */