1/* GSK - The GTK Scene Kit
2 * Copyright 2016 Endless
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 __GSK_ENUMS_H__
19#define __GSK_ENUMS_H__
20
21#if !defined (__GSK_H_INSIDE__) && !defined (GTK_COMPILATION)
22#error "Only <gsk/gsk.h> can be included directly."
23#endif
24
25/**
26 * GskRenderNodeType:
27 * @GSK_NOT_A_RENDER_NODE: Error type. No node will ever have this type.
28 * @GSK_CONTAINER_NODE: A node containing a stack of children
29 * @GSK_CAIRO_NODE: A node drawing a `cairo_surface_t`
30 * @GSK_COLOR_NODE: A node drawing a single color rectangle
31 * @GSK_LINEAR_GRADIENT_NODE: A node drawing a linear gradient
32 * @GSK_REPEATING_LINEAR_GRADIENT_NODE: A node drawing a repeating linear gradient
33 * @GSK_RADIAL_GRADIENT_NODE: A node drawing a radial gradient
34 * @GSK_REPEATING_RADIAL_GRADIENT_NODE: A node drawing a repeating radial gradient
35 * @GSK_CONIC_GRADIENT_NODE: A node drawing a conic gradient
36 * @GSK_BORDER_NODE: A node stroking a border around an area
37 * @GSK_TEXTURE_NODE: A node drawing a `GdkTexture`
38 * @GSK_INSET_SHADOW_NODE: A node drawing an inset shadow
39 * @GSK_OUTSET_SHADOW_NODE: A node drawing an outset shadow
40 * @GSK_TRANSFORM_NODE: A node that renders its child after applying a matrix transform
41 * @GSK_OPACITY_NODE: A node that changes the opacity of its child
42 * @GSK_COLOR_MATRIX_NODE: A node that applies a color matrix to every pixel
43 * @GSK_REPEAT_NODE: A node that repeats the child's contents
44 * @GSK_CLIP_NODE: A node that clips its child to a rectangular area
45 * @GSK_ROUNDED_CLIP_NODE: A node that clips its child to a rounded rectangle
46 * @GSK_SHADOW_NODE: A node that draws a shadow below its child
47 * @GSK_BLEND_NODE: A node that blends two children together
48 * @GSK_CROSS_FADE_NODE: A node that cross-fades between two children
49 * @GSK_TEXT_NODE: A node containing a glyph string
50 * @GSK_BLUR_NODE: A node that applies a blur
51 * @GSK_DEBUG_NODE: Debug information that does not affect the rendering
52 * @GSK_GL_SHADER_NODE: A node that uses OpenGL fragment shaders to render
53
54 * The type of a node determines what the node is rendering.
55 */
56typedef enum {
57 GSK_NOT_A_RENDER_NODE = 0,
58 GSK_CONTAINER_NODE,
59 GSK_CAIRO_NODE,
60 GSK_COLOR_NODE,
61 GSK_LINEAR_GRADIENT_NODE,
62 GSK_REPEATING_LINEAR_GRADIENT_NODE,
63 GSK_RADIAL_GRADIENT_NODE,
64 GSK_REPEATING_RADIAL_GRADIENT_NODE,
65 GSK_CONIC_GRADIENT_NODE,
66 GSK_BORDER_NODE,
67 GSK_TEXTURE_NODE,
68 GSK_INSET_SHADOW_NODE,
69 GSK_OUTSET_SHADOW_NODE,
70 GSK_TRANSFORM_NODE,
71 GSK_OPACITY_NODE,
72 GSK_COLOR_MATRIX_NODE,
73 GSK_REPEAT_NODE,
74 GSK_CLIP_NODE,
75 GSK_ROUNDED_CLIP_NODE,
76 GSK_SHADOW_NODE,
77 GSK_BLEND_NODE,
78 GSK_CROSS_FADE_NODE,
79 GSK_TEXT_NODE,
80 GSK_BLUR_NODE,
81 GSK_DEBUG_NODE,
82 GSK_GL_SHADER_NODE
83} GskRenderNodeType;
84
85/**
86 * GskScalingFilter:
87 * @GSK_SCALING_FILTER_LINEAR: linear interpolation filter
88 * @GSK_SCALING_FILTER_NEAREST: nearest neighbor interpolation filter
89 * @GSK_SCALING_FILTER_TRILINEAR: linear interpolation along each axis,
90 * plus mipmap generation, with linear interpolation along the mipmap
91 * levels
92 *
93 * The filters used when scaling texture data.
94 *
95 * The actual implementation of each filter is deferred to the
96 * rendering pipeline.
97 */
98typedef enum {
99 GSK_SCALING_FILTER_LINEAR,
100 GSK_SCALING_FILTER_NEAREST,
101 GSK_SCALING_FILTER_TRILINEAR
102} GskScalingFilter;
103
104/**
105 * GskBlendMode:
106 * @GSK_BLEND_MODE_DEFAULT: The default blend mode, which specifies no blending
107 * @GSK_BLEND_MODE_MULTIPLY: The source color is multiplied by the destination
108 * and replaces the destination
109 * @GSK_BLEND_MODE_SCREEN: Multiplies the complements of the destination and source
110 * color values, then complements the result.
111 * @GSK_BLEND_MODE_OVERLAY: Multiplies or screens the colors, depending on the
112 * destination color value. This is the inverse of hard-list
113 * @GSK_BLEND_MODE_DARKEN: Selects the darker of the destination and source colors
114 * @GSK_BLEND_MODE_LIGHTEN: Selects the lighter of the destination and source colors
115 * @GSK_BLEND_MODE_COLOR_DODGE: Brightens the destination color to reflect the source color
116 * @GSK_BLEND_MODE_COLOR_BURN: Darkens the destination color to reflect the source color
117 * @GSK_BLEND_MODE_HARD_LIGHT: Multiplies or screens the colors, depending on the source color value
118 * @GSK_BLEND_MODE_SOFT_LIGHT: Darkens or lightens the colors, depending on the source color value
119 * @GSK_BLEND_MODE_DIFFERENCE: Subtracts the darker of the two constituent colors from the lighter color
120 * @GSK_BLEND_MODE_EXCLUSION: Produces an effect similar to that of the difference mode but lower in contrast
121 * @GSK_BLEND_MODE_COLOR: Creates a color with the hue and saturation of the source color and the luminosity of the destination color
122 * @GSK_BLEND_MODE_HUE: Creates a color with the hue of the source color and the saturation and luminosity of the destination color
123 * @GSK_BLEND_MODE_SATURATION: Creates a color with the saturation of the source color and the hue and luminosity of the destination color
124 * @GSK_BLEND_MODE_LUMINOSITY: Creates a color with the luminosity of the source color and the hue and saturation of the destination color
125 *
126 * The blend modes available for render nodes.
127 *
128 * The implementation of each blend mode is deferred to the
129 * rendering pipeline.
130 *
131 * See <https://www.w3.org/TR/compositing-1/#blending> for more information
132 * on blending and blend modes.
133 */
134typedef enum {
135 GSK_BLEND_MODE_DEFAULT = 0,
136
137 GSK_BLEND_MODE_MULTIPLY,
138 GSK_BLEND_MODE_SCREEN,
139 GSK_BLEND_MODE_OVERLAY,
140 GSK_BLEND_MODE_DARKEN,
141 GSK_BLEND_MODE_LIGHTEN,
142 GSK_BLEND_MODE_COLOR_DODGE,
143 GSK_BLEND_MODE_COLOR_BURN,
144 GSK_BLEND_MODE_HARD_LIGHT,
145 GSK_BLEND_MODE_SOFT_LIGHT,
146 GSK_BLEND_MODE_DIFFERENCE,
147 GSK_BLEND_MODE_EXCLUSION,
148 GSK_BLEND_MODE_COLOR,
149 GSK_BLEND_MODE_HUE,
150 GSK_BLEND_MODE_SATURATION,
151 GSK_BLEND_MODE_LUMINOSITY
152} GskBlendMode;
153
154/**
155 * GskCorner:
156 * @GSK_CORNER_TOP_LEFT: The top left corner
157 * @GSK_CORNER_TOP_RIGHT: The top right corner
158 * @GSK_CORNER_BOTTOM_RIGHT: The bottom right corner
159 * @GSK_CORNER_BOTTOM_LEFT: The bottom left corner
160 *
161 * The corner indices used by `GskRoundedRect`.
162 */
163typedef enum {
164 GSK_CORNER_TOP_LEFT,
165 GSK_CORNER_TOP_RIGHT,
166 GSK_CORNER_BOTTOM_RIGHT,
167 GSK_CORNER_BOTTOM_LEFT
168} GskCorner;
169
170/**
171 * GskSerializationError:
172 * @GSK_SERIALIZATION_UNSUPPORTED_FORMAT: The format can not be identified
173 * @GSK_SERIALIZATION_UNSUPPORTED_VERSION: The version of the data is not
174 * understood
175 * @GSK_SERIALIZATION_INVALID_DATA: The given data may not exist in
176 * a proper serialization
177 *
178 * Errors that can happen during (de)serialization.
179 */
180typedef enum {
181 GSK_SERIALIZATION_UNSUPPORTED_FORMAT,
182 GSK_SERIALIZATION_UNSUPPORTED_VERSION,
183 GSK_SERIALIZATION_INVALID_DATA
184} GskSerializationError;
185
186/**
187 * GskTransformCategory:
188 * @GSK_TRANSFORM_CATEGORY_UNKNOWN: The category of the matrix has not been
189 * determined.
190 * @GSK_TRANSFORM_CATEGORY_ANY: Analyzing the matrix concluded that it does
191 * not fit in any other category.
192 * @GSK_TRANSFORM_CATEGORY_3D: The matrix is a 3D matrix. This means that
193 * the w column (the last column) has the values (0, 0, 0, 1).
194 * @GSK_TRANSFORM_CATEGORY_2D: The matrix is a 2D matrix. This is equivalent
195 * to graphene_matrix_is_2d() returning %TRUE. In particular, this
196 * means that Cairo can deal with the matrix.
197 * @GSK_TRANSFORM_CATEGORY_2D_AFFINE: The matrix is a combination of 2D scale
198 * and 2D translation operations. In particular, this means that any
199 * rectangle can be transformed exactly using this matrix.
200 * @GSK_TRANSFORM_CATEGORY_2D_TRANSLATE: The matrix is a 2D translation.
201 * @GSK_TRANSFORM_CATEGORY_IDENTITY: The matrix is the identity matrix.
202 *
203 * The categories of matrices relevant for GSK and GTK.
204 *
205 * Note that any category includes matrices of all later categories.
206 * So if you want to for example check if a matrix is a 2D matrix,
207 * `category >= GSK_TRANSFORM_CATEGORY_2D` is the way to do this.
208 *
209 * Also keep in mind that rounding errors may cause matrices to not
210 * conform to their categories. Otherwise, matrix operations done via
211 * multiplication will not worsen categories. So for the matrix
212 * multiplication `C = A * B`, `category(C) = MIN (category(A), category(B))`.
213 */
214typedef enum
215{
216 GSK_TRANSFORM_CATEGORY_UNKNOWN,
217 GSK_TRANSFORM_CATEGORY_ANY,
218 GSK_TRANSFORM_CATEGORY_3D,
219 GSK_TRANSFORM_CATEGORY_2D,
220 GSK_TRANSFORM_CATEGORY_2D_AFFINE,
221 GSK_TRANSFORM_CATEGORY_2D_TRANSLATE,
222 GSK_TRANSFORM_CATEGORY_IDENTITY
223} GskTransformCategory;
224
225/**
226 * GskGLUniformType:
227 * @GSK_GL_UNIFORM_TYPE_NONE: No type, used for uninitialized or unspecified values.
228 * @GSK_GL_UNIFORM_TYPE_FLOAT: A float uniform
229 * @GSK_GL_UNIFORM_TYPE_INT: A GLSL int / gint32 uniform
230 * @GSK_GL_UNIFORM_TYPE_UINT: A GLSL uint / guint32 uniform
231 * @GSK_GL_UNIFORM_TYPE_BOOL: A GLSL bool / gboolean uniform
232 * @GSK_GL_UNIFORM_TYPE_VEC2: A GLSL vec2 / graphene_vec2_t uniform
233 * @GSK_GL_UNIFORM_TYPE_VEC3: A GLSL vec3 / graphene_vec3_t uniform
234 * @GSK_GL_UNIFORM_TYPE_VEC4: A GLSL vec4 / graphene_vec4_t uniform
235 *
236 * This defines the types of the uniforms that `GskGLShaders`
237 * declare.
238 *
239 * It defines both what the type is called in the GLSL shader
240 * code, and what the corresponding C type is on the Gtk side.
241 */
242typedef enum
243{
244 GSK_GL_UNIFORM_TYPE_NONE,
245 GSK_GL_UNIFORM_TYPE_FLOAT,
246 GSK_GL_UNIFORM_TYPE_INT,
247 GSK_GL_UNIFORM_TYPE_UINT,
248 GSK_GL_UNIFORM_TYPE_BOOL,
249 GSK_GL_UNIFORM_TYPE_VEC2,
250 GSK_GL_UNIFORM_TYPE_VEC3,
251 GSK_GL_UNIFORM_TYPE_VEC4,
252} GskGLUniformType;
253
254
255#endif /* __GSK_TYPES_H__ */
256

source code of gtk/gsk/gskenums.h