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 */ 56 typedef 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 */ 98 typedef 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 */ 134 typedef 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 */ 163 typedef 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 */ 180 typedef 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 */ 214 typedef 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 */ 242 typedef 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