;; From gskenums.h

;; Original typedef:
;; typedef enum {
;;   GSK_NOT_A_RENDER_NODE = 0,
;;   GSK_CONTAINER_NODE,
;;   GSK_CAIRO_NODE,
;;   GSK_COLOR_NODE,
;;   GSK_LINEAR_GRADIENT_NODE,
;;   GSK_REPEATING_LINEAR_GRADIENT_NODE,
;;   GSK_RADIAL_GRADIENT_NODE,
;;   GSK_REPEATING_RADIAL_GRADIENT_NODE,
;;   GSK_CONIC_GRADIENT_NODE,
;;   GSK_BORDER_NODE,
;;   GSK_TEXTURE_NODE,
;;   GSK_INSET_SHADOW_NODE,
;;   GSK_OUTSET_SHADOW_NODE,
;;   GSK_TRANSFORM_NODE,
;;   GSK_OPACITY_NODE,
;;   GSK_COLOR_MATRIX_NODE,
;;   GSK_REPEAT_NODE,
;;   GSK_CLIP_NODE,
;;   GSK_ROUNDED_CLIP_NODE,
;;   GSK_SHADOW_NODE,
;;   GSK_BLEND_NODE,
;;   GSK_CROSS_FADE_NODE,
;;   GSK_TEXT_NODE,
;;   GSK_BLUR_NODE,
;;   GSK_DEBUG_NODE,
;;   GSK_GL_SHADER_NODE,
;;   GSK_TEXTURE_SCALE_NODE,
;;   GSK_MASK_NODE,
;;   GSK_FILL_NODE,
;;   GSK_STROKE_NODE,
;;   GSK_SUBSURFACE_NODE,
;;   GSK_COMPONENT_TRANSFER_NODE,
;;   GSK_COPY_NODE,
;;   GSK_PASTE_NODE,
;;   GSK_COMPOSITE_NODE,
;;   GSK_ISOLATION_NODE,
;;   GSK_DISPLACEMENT_NODE,
;;   GSK_ARITHMETIC_NODE,
;; } GskRenderNodeType;

(define-enum-extended RenderNodeType
  (in-module "Gsk")
  (c-name "GskRenderNodeType")
  (values
    '("not-a-render-node" "GSK_NOT_A_RENDER_NODE" "0")
    '("container-node" "GSK_CONTAINER_NODE" "1")
    '("cairo-node" "GSK_CAIRO_NODE" "2")
    '("color-node" "GSK_COLOR_NODE" "3")
    '("linear-gradient-node" "GSK_LINEAR_GRADIENT_NODE" "4")
    '("repeating-linear-gradient-node" "GSK_REPEATING_LINEAR_GRADIENT_NODE" "5")
    '("radial-gradient-node" "GSK_RADIAL_GRADIENT_NODE" "6")
    '("repeating-radial-gradient-node" "GSK_REPEATING_RADIAL_GRADIENT_NODE" "7")
    '("conic-gradient-node" "GSK_CONIC_GRADIENT_NODE" "8")
    '("border-node" "GSK_BORDER_NODE" "9")
    '("texture-node" "GSK_TEXTURE_NODE" "10")
    '("inset-shadow-node" "GSK_INSET_SHADOW_NODE" "11")
    '("outset-shadow-node" "GSK_OUTSET_SHADOW_NODE" "12")
    '("transform-node" "GSK_TRANSFORM_NODE" "13")
    '("opacity-node" "GSK_OPACITY_NODE" "14")
    '("color-matrix-node" "GSK_COLOR_MATRIX_NODE" "15")
    '("repeat-node" "GSK_REPEAT_NODE" "16")
    '("clip-node" "GSK_CLIP_NODE" "17")
    '("rounded-clip-node" "GSK_ROUNDED_CLIP_NODE" "18")
    '("shadow-node" "GSK_SHADOW_NODE" "19")
    '("blend-node" "GSK_BLEND_NODE" "20")
    '("cross-fade-node" "GSK_CROSS_FADE_NODE" "21")
    '("text-node" "GSK_TEXT_NODE" "22")
    '("blur-node" "GSK_BLUR_NODE" "23")
    '("debug-node" "GSK_DEBUG_NODE" "24")
    '("gl-shader-node" "GSK_GL_SHADER_NODE" "25")
    '("texture-scale-node" "GSK_TEXTURE_SCALE_NODE" "26")
    '("mask-node" "GSK_MASK_NODE" "27")
    '("fill-node" "GSK_FILL_NODE" "28")
    '("stroke-node" "GSK_STROKE_NODE" "29")
    '("subsurface-node" "GSK_SUBSURFACE_NODE" "30")
    '("component-transfer-node" "GSK_COMPONENT_TRANSFER_NODE" "31")
    '("copy-node" "GSK_COPY_NODE" "32")
    '("paste-node" "GSK_PASTE_NODE" "33")
    '("composite-node" "GSK_COMPOSITE_NODE" "34")
    '("isolation-node" "GSK_ISOLATION_NODE" "35")
    '("displacement-node" "GSK_DISPLACEMENT_NODE" "36")
    '("arithmetic-node" "GSK_ARITHMETIC_NODE" "37")
  )
)

;; Original typedef:
;; typedef enum {
;;   GSK_SCALING_FILTER_LINEAR,
;;   GSK_SCALING_FILTER_NEAREST,
;;   GSK_SCALING_FILTER_TRILINEAR
;; } GskScalingFilter;

(define-enum-extended ScalingFilter
  (in-module "Gsk")
  (c-name "GskScalingFilter")
  (values
    '("linear" "GSK_SCALING_FILTER_LINEAR" "0")
    '("nearest" "GSK_SCALING_FILTER_NEAREST" "1")
    '("trilinear" "GSK_SCALING_FILTER_TRILINEAR" "2")
  )
)

;; Original typedef:
;; typedef enum {
;;   GSK_BLEND_MODE_DEFAULT = 0,
;; 
;;   GSK_BLEND_MODE_MULTIPLY,
;;   GSK_BLEND_MODE_SCREEN,
;;   GSK_BLEND_MODE_OVERLAY,
;;   GSK_BLEND_MODE_DARKEN,
;;   GSK_BLEND_MODE_LIGHTEN,
;;   GSK_BLEND_MODE_COLOR_DODGE,
;;   GSK_BLEND_MODE_COLOR_BURN,
;;   GSK_BLEND_MODE_HARD_LIGHT,
;;   GSK_BLEND_MODE_SOFT_LIGHT,
;;   GSK_BLEND_MODE_DIFFERENCE,
;;   GSK_BLEND_MODE_EXCLUSION,
;;   GSK_BLEND_MODE_COLOR,
;;   GSK_BLEND_MODE_HUE,
;;   GSK_BLEND_MODE_SATURATION,
;;   GSK_BLEND_MODE_LUMINOSITY
;; } GskBlendMode;

(define-enum-extended BlendMode
  (in-module "Gsk")
  (c-name "GskBlendMode")
  (values
    '("default" "GSK_BLEND_MODE_DEFAULT" "0")
    '("multiply" "GSK_BLEND_MODE_MULTIPLY" "1")
    '("screen" "GSK_BLEND_MODE_SCREEN" "2")
    '("overlay" "GSK_BLEND_MODE_OVERLAY" "3")
    '("darken" "GSK_BLEND_MODE_DARKEN" "4")
    '("lighten" "GSK_BLEND_MODE_LIGHTEN" "5")
    '("color-dodge" "GSK_BLEND_MODE_COLOR_DODGE" "6")
    '("color-burn" "GSK_BLEND_MODE_COLOR_BURN" "7")
    '("hard-light" "GSK_BLEND_MODE_HARD_LIGHT" "8")
    '("soft-light" "GSK_BLEND_MODE_SOFT_LIGHT" "9")
    '("difference" "GSK_BLEND_MODE_DIFFERENCE" "10")
    '("exclusion" "GSK_BLEND_MODE_EXCLUSION" "11")
    '("color" "GSK_BLEND_MODE_COLOR" "12")
    '("hue" "GSK_BLEND_MODE_HUE" "13")
    '("saturation" "GSK_BLEND_MODE_SATURATION" "14")
    '("luminosity" "GSK_BLEND_MODE_LUMINOSITY" "15")
  )
)

;; Original typedef:
;; typedef enum
;; {
;;   GSK_PORTER_DUFF_SOURCE,
;;   GSK_PORTER_DUFF_DEST,
;;   GSK_PORTER_DUFF_SOURCE_OVER_DEST,
;;   GSK_PORTER_DUFF_DEST_OVER_SOURCE,
;;   GSK_PORTER_DUFF_SOURCE_IN_DEST,
;;   GSK_PORTER_DUFF_DEST_IN_SOURCE,
;;   GSK_PORTER_DUFF_SOURCE_OUT_DEST,
;;   GSK_PORTER_DUFF_DEST_OUT_SOURCE,
;;   GSK_PORTER_DUFF_SOURCE_ATOP_DEST,
;;   GSK_PORTER_DUFF_DEST_ATOP_SOURCE,
;;   GSK_PORTER_DUFF_XOR,
;;   GSK_PORTER_DUFF_CLEAR
;; } GskPorterDuff;

(define-enum-extended PorterDuff
  (in-module "Gsk")
  (c-name "GskPorterDuff")
  (values
    '("source" "GSK_PORTER_DUFF_SOURCE" "0")
    '("dest" "GSK_PORTER_DUFF_DEST" "1")
    '("source-over-dest" "GSK_PORTER_DUFF_SOURCE_OVER_DEST" "2")
    '("dest-over-source" "GSK_PORTER_DUFF_DEST_OVER_SOURCE" "3")
    '("source-in-dest" "GSK_PORTER_DUFF_SOURCE_IN_DEST" "4")
    '("dest-in-source" "GSK_PORTER_DUFF_DEST_IN_SOURCE" "5")
    '("source-out-dest" "GSK_PORTER_DUFF_SOURCE_OUT_DEST" "6")
    '("dest-out-source" "GSK_PORTER_DUFF_DEST_OUT_SOURCE" "7")
    '("source-atop-dest" "GSK_PORTER_DUFF_SOURCE_ATOP_DEST" "8")
    '("dest-atop-source" "GSK_PORTER_DUFF_DEST_ATOP_SOURCE" "9")
    '("xor" "GSK_PORTER_DUFF_XOR" "10")
    '("clear" "GSK_PORTER_DUFF_CLEAR" "11")
  )
)

;; Original typedef:
;; typedef enum {
;;   GSK_CORNER_TOP_LEFT,
;;   GSK_CORNER_TOP_RIGHT,
;;   GSK_CORNER_BOTTOM_RIGHT,
;;   GSK_CORNER_BOTTOM_LEFT
;; } GskCorner;

(define-enum-extended Corner
  (in-module "Gsk")
  (c-name "GskCorner")
  (values
    '("top-left" "GSK_CORNER_TOP_LEFT" "0")
    '("top-right" "GSK_CORNER_TOP_RIGHT" "1")
    '("bottom-right" "GSK_CORNER_BOTTOM_RIGHT" "2")
    '("bottom-left" "GSK_CORNER_BOTTOM_LEFT" "3")
  )
)

;; Original typedef:
;; typedef enum {
;;   GSK_FILL_RULE_WINDING,
;;   GSK_FILL_RULE_EVEN_ODD
;; } GskFillRule;

(define-enum-extended FillRule
  (in-module "Gsk")
  (c-name "GskFillRule")
  (values
    '("winding" "GSK_FILL_RULE_WINDING" "0")
    '("even-odd" "GSK_FILL_RULE_EVEN_ODD" "1")
  )
)

;; Original typedef:
;; typedef enum {
;;   GSK_ISOLATION_NONE       = 0,
;;   GSK_ISOLATION_BACKGROUND = 1 << 0,
;;   GSK_ISOLATION_COPY_PASTE = 1 << 1,
;;   GSK_ISOLATION_ALL        = -1
;; } GskIsolation;

(define-flags-extended Isolation
  (in-module "Gsk")
  (c-name "GskIsolation")
  (values
    '("none" "GSK_ISOLATION_NONE" "0x0")
    '("background" "GSK_ISOLATION_BACKGROUND" "1 << 0")
    '("copy-paste" "GSK_ISOLATION_COPY_PASTE" "1 << 1")
    '("all" "GSK_ISOLATION_ALL" "-0x1")
  )
)

;; Original typedef:
;; typedef enum {
;;   GSK_LINE_CAP_BUTT,
;;   GSK_LINE_CAP_ROUND,
;;   GSK_LINE_CAP_SQUARE
;; } GskLineCap;

(define-enum-extended LineCap
  (in-module "Gsk")
  (c-name "GskLineCap")
  (values
    '("butt" "GSK_LINE_CAP_BUTT" "0")
    '("round" "GSK_LINE_CAP_ROUND" "1")
    '("square" "GSK_LINE_CAP_SQUARE" "2")
  )
)

;; Original typedef:
;; typedef enum {
;;   GSK_LINE_JOIN_MITER,
;;   GSK_LINE_JOIN_ROUND,
;;   GSK_LINE_JOIN_BEVEL,
;; } GskLineJoin;

(define-enum-extended LineJoin
  (in-module "Gsk")
  (c-name "GskLineJoin")
  (values
    '("miter" "GSK_LINE_JOIN_MITER" "0")
    '("round" "GSK_LINE_JOIN_ROUND" "1")
    '("bevel" "GSK_LINE_JOIN_BEVEL" "2")
  )
)

;; Original typedef:
;; typedef enum {
;;   GSK_PATH_MOVE,
;;   GSK_PATH_CLOSE,
;;   GSK_PATH_LINE,
;;   GSK_PATH_QUAD,
;;   GSK_PATH_CUBIC,
;;   GSK_PATH_CONIC,
;; } GskPathOperation;

(define-enum-extended PathOperation
  (in-module "Gsk")
  (c-name "GskPathOperation")
  (values
    '("move" "GSK_PATH_MOVE" "0")
    '("close" "GSK_PATH_CLOSE" "1")
    '("line" "GSK_PATH_LINE" "2")
    '("quad" "GSK_PATH_QUAD" "3")
    '("cubic" "GSK_PATH_CUBIC" "4")
    '("conic" "GSK_PATH_CONIC" "5")
  )
)

;; Original typedef:
;; typedef enum {
;;   GSK_PATH_FROM_START,
;;   GSK_PATH_TO_START,
;;   GSK_PATH_TO_END,
;;   GSK_PATH_FROM_END,
;; } GskPathDirection;

(define-enum-extended PathDirection
  (in-module "Gsk")
  (c-name "GskPathDirection")
  (values
    '("from-start" "GSK_PATH_FROM_START" "0")
    '("to-start" "GSK_PATH_TO_START" "1")
    '("to-end" "GSK_PATH_TO_END" "2")
    '("from-end" "GSK_PATH_FROM_END" "3")
  )
)

;; Original typedef:
;; typedef enum {
;;   GSK_SERIALIZATION_UNSUPPORTED_FORMAT,
;;   GSK_SERIALIZATION_UNSUPPORTED_VERSION,
;;   GSK_SERIALIZATION_INVALID_DATA
;; } GskSerializationError;

(define-enum-extended SerializationError
  (in-module "Gsk")
  (c-name "GskSerializationError")
  (values
    '("unsupported-format" "GSK_SERIALIZATION_UNSUPPORTED_FORMAT" "0")
    '("unsupported-version" "GSK_SERIALIZATION_UNSUPPORTED_VERSION" "1")
    '("invalid-data" "GSK_SERIALIZATION_INVALID_DATA" "2")
  )
)

;; Original typedef:
;; typedef enum
;; {
;;   GSK_TRANSFORM_CATEGORY_UNKNOWN,
;;   GSK_TRANSFORM_CATEGORY_ANY,
;;   GSK_TRANSFORM_CATEGORY_3D,
;;   GSK_TRANSFORM_CATEGORY_2D,
;;   GSK_TRANSFORM_CATEGORY_2D_AFFINE,
;;   GSK_TRANSFORM_CATEGORY_2D_TRANSLATE,
;;   GSK_TRANSFORM_CATEGORY_IDENTITY
;; } GskTransformCategory;

(define-enum-extended TransformCategory
  (in-module "Gsk")
  (c-name "GskTransformCategory")
  (values
    '("unknown" "GSK_TRANSFORM_CATEGORY_UNKNOWN" "0")
    '("any" "GSK_TRANSFORM_CATEGORY_ANY" "1")
    '("3d" "GSK_TRANSFORM_CATEGORY_3D" "2")
    '("2d" "GSK_TRANSFORM_CATEGORY_2D" "3")
    '("2d-affine" "GSK_TRANSFORM_CATEGORY_2D_AFFINE" "4")
    '("2d-translate" "GSK_TRANSFORM_CATEGORY_2D_TRANSLATE" "5")
    '("identity" "GSK_TRANSFORM_CATEGORY_IDENTITY" "6")
  )
)

;; Original typedef:
;; typedef enum
;; {
;;   GSK_GL_UNIFORM_TYPE_NONE,
;;   GSK_GL_UNIFORM_TYPE_FLOAT,
;;   GSK_GL_UNIFORM_TYPE_INT,
;;   GSK_GL_UNIFORM_TYPE_UINT,
;;   GSK_GL_UNIFORM_TYPE_BOOL,
;;   GSK_GL_UNIFORM_TYPE_VEC2,
;;   GSK_GL_UNIFORM_TYPE_VEC3,
;;   GSK_GL_UNIFORM_TYPE_VEC4,
;; } GskGLUniformType;

(define-enum-extended GLUniformType
  (in-module "Gsk")
  (c-name "GskGLUniformType")
  (values
    '("none" "GSK_GL_UNIFORM_TYPE_NONE" "0")
    '("float" "GSK_GL_UNIFORM_TYPE_FLOAT" "1")
    '("int" "GSK_GL_UNIFORM_TYPE_INT" "2")
    '("uint" "GSK_GL_UNIFORM_TYPE_UINT" "3")
    '("bool" "GSK_GL_UNIFORM_TYPE_BOOL" "4")
    '("vec2" "GSK_GL_UNIFORM_TYPE_VEC2" "5")
    '("vec3" "GSK_GL_UNIFORM_TYPE_VEC3" "6")
    '("vec4" "GSK_GL_UNIFORM_TYPE_VEC4" "7")
  )
)

;; Original typedef:
;; typedef enum
;; {
;;   GSK_MASK_MODE_ALPHA,
;;   GSK_MASK_MODE_INVERTED_ALPHA,
;;   GSK_MASK_MODE_LUMINANCE,
;;   GSK_MASK_MODE_INVERTED_LUMINANCE
;; } GskMaskMode;

(define-enum-extended MaskMode
  (in-module "Gsk")
  (c-name "GskMaskMode")
  (values
    '("alpha" "GSK_MASK_MODE_ALPHA" "0")
    '("inverted-alpha" "GSK_MASK_MODE_INVERTED_ALPHA" "1")
    '("luminance" "GSK_MASK_MODE_LUMINANCE" "2")
    '("inverted-luminance" "GSK_MASK_MODE_INVERTED_LUMINANCE" "3")
  )
)

;; From gskpath.h

;; Original typedef:
;; typedef enum
;; { /*< prefix=GSK_PATH_FOREACH >*/
;;   GSK_PATH_FOREACH_ALLOW_ONLY_LINES = 0,
;;   GSK_PATH_FOREACH_ALLOW_QUAD       = (1 << 0),
;;   GSK_PATH_FOREACH_ALLOW_CUBIC      = (1 << 1),
;;   GSK_PATH_FOREACH_ALLOW_CONIC      = (1 << 2),
;; } GskPathForeachFlags;

(define-flags-extended PathForeachFlags
  (in-module "Gsk")
  (c-name "GskPathForeachFlags")
  (values
    '("only-lines" "GSK_PATH_FOREACH_ALLOW_ONLY_LINES" "0x0")
    '("quad" "GSK_PATH_FOREACH_ALLOW_QUAD" "(1 << 0)")
    '("cubic" "GSK_PATH_FOREACH_ALLOW_CUBIC" "(1 << 1)")
    '("conic" "GSK_PATH_FOREACH_ALLOW_CONIC" "(1 << 2)")
  )
)

;; Original typedef:
;; typedef enum
;; {
;;   GSK_PATH_INTERSECTION_NONE,
;;   GSK_PATH_INTERSECTION_NORMAL,
;;   GSK_PATH_INTERSECTION_START,
;;   GSK_PATH_INTERSECTION_END,
;; } GskPathIntersection;

(define-enum-extended PathIntersection
  (in-module "Gsk")
  (c-name "GskPathIntersection")
  (values
    '("none" "GSK_PATH_INTERSECTION_NONE" "0")
    '("normal" "GSK_PATH_INTERSECTION_NORMAL" "1")
    '("start" "GSK_PATH_INTERSECTION_START" "2")
    '("end" "GSK_PATH_INTERSECTION_END" "3")
  )
)

