/*
 * Copyright © 2025 Red Hat, Inc
 *
 * SPDX-License-Identifier: LGPL-2.1-or-later
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2.1 of the License, or (at your option) any later version.
 *
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this library. If not, see <http://www.gnu.org/licenses/>.
 *
 * Authors: Matthias Clasen <mclasen@redhat.com>
 */

#pragma once

G_BEGIN_DECLS

typedef enum
{
  ALIGN_MIN,
  ALIGN_MID,
  ALIGN_MAX,
} Align;

typedef enum
{
  MEET,
  SLICE,
} MeetOrSlice;

typedef enum
{
  GTK_SVG_RUN_MODE_STOPPED,
  GTK_SVG_RUN_MODE_DISCRETE,
  GTK_SVG_RUN_MODE_CONTINUOUS,
} GtkSvgRunMode;

typedef enum
{
  GTK_SVG_USES_STROKES             = 1 << 0,
  GTK_SVG_USES_SYMBOLIC_FOREGROUND = 1 << 1,
  GTK_SVG_USES_SYMBOLIC_ERROR      = 1 << 2,
  GTK_SVG_USES_SYMBOLIC_WARNING    = 1 << 3,
  GTK_SVG_USES_SYMBOLIC_SUCCESS    = 1 << 4,
  GTK_SVG_USES_SYMBOLIC_ACCENT     = 1 << 5,
} GtkSvgUses;

typedef enum
{
  PAINT_NONE,
  PAINT_CONTEXT_FILL,
  PAINT_CONTEXT_STROKE,
  PAINT_CURRENT_COLOR,
  PAINT_COLOR,
  PAINT_SYMBOLIC,
  PAINT_SERVER,
  PAINT_SERVER_WITH_FALLBACK,
  PAINT_SERVER_WITH_CURRENT_COLOR,
} PaintKind;

typedef enum
{
  PAINT_ORDER_FILL_STROKE_MARKERS,
  PAINT_ORDER_FILL_MARKERS_STROKE,
  PAINT_ORDER_STROKE_FILL_MARKERS,
  PAINT_ORDER_STROKE_MARKERS_FILL,
  PAINT_ORDER_MARKERS_FILL_STROKE,
  PAINT_ORDER_MARKERS_STROKE_FILL,
} PaintOrder;

typedef enum
{
  CLIP_NONE,
  CLIP_PATH,
  CLIP_URL,
} ClipKind;

typedef enum
{
  TRANSFORM_NONE,
  TRANSFORM_TRANSLATE,
  TRANSFORM_SCALE,
  TRANSFORM_ROTATE,
  TRANSFORM_SKEW_X,
  TRANSFORM_SKEW_Y,
  TRANSFORM_MATRIX,
  /* Below are non-SVG transforms */
  TRANSFORM_TRANSLATE_3D,
  TRANSFORM_SCALE_3D,
  TRANSFORM_ROTATE_3D,
  TRANSFORM_SKEW,
  TRANSFORM_PERSPECTIVE,
  TRANSFORM_MATRIX_3D,
} TransformType;

typedef enum
{
  COORD_UNITS_USER_SPACE_ON_USE,
  COORD_UNITS_OBJECT_BOUNDING_BOX,
} CoordUnits;

typedef enum
{
  VISIBILITY_HIDDEN,
  VISIBILITY_VISIBLE,
} Visibility;

typedef enum
{
  DISPLAY_NONE,
  DISPLAY_INLINE,
} SvgDisplay;

typedef enum
{
  OVERFLOW_VISIBLE,
  OVERFLOW_HIDDEN,
  OVERFLOW_AUTO,
} SvgOverflow;

typedef enum {
  ISOLATION_AUTO,
  ISOLATION_ISOLATE,
} Isolation;

typedef enum {
  TEXT_ANCHOR_START,
  TEXT_ANCHOR_MIDDLE,
  TEXT_ANCHOR_END
} TextAnchor;

typedef enum {
  DOMINANT_BASELINE_AUTO,
  DOMINANT_BASELINE_IDEOGRAPHIC,
  DOMINANT_BASELINE_ALPHABETIC,
  DOMINANT_BASELINE_HANGING,
  DOMINANT_BASELINE_MATHEMATICAL,
  DOMINANT_BASELINE_CENTRAL,
  DOMINANT_BASELINE_MIDDLE,
  DOMINANT_BASELINE_TEXT_AFTER_EDGE,
  DOMINANT_BASELINE_TEXT_BEFORE_EDGE,
  // CSS3
  DOMINANT_BASELINE_TEXT_TOP,
  DOMINANT_BASELINE_TEXT_BOTTOM
} DominantBaseline;

typedef enum
{
  MARKER_UNITS_STROKE_WIDTH,
  MARKER_UNITS_USER_SPACE_ON_USE,
} MarkerUnits;

typedef enum {
  UNICODE_BIDI_NORMAL,
  UNICODE_BIDI_EMBED,
  UNICODE_BIDI_ISOLATE,
  UNICODE_BIDI_OVERRIDE,
  UNICODE_BIDI_ISOLATE_OVERRIDE,
  UNICODE_BIDI_PLAINTEXT,
} UnicodeBidi;

typedef enum {
  WRITING_MODE_HORIZONTAL_TB,
  WRITING_MODE_VERTICAL_RL,
  WRITING_MODE_VERTICAL_LR,

  /* SVG 1.1 legacy properties */
  WRITING_MODE_LEGACY_LR,
  WRITING_MODE_LEGACY_LR_TB,
  WRITING_MODE_LEGACY_RL,
  WRITING_MODE_LEGACY_RL_TB,
  WRITING_MODE_LEGACY_TB,
  WRITING_MODE_LEGACY_TB_RL,
} WritingMode;

typedef enum
{
  EDGE_MODE_DUPLICATE,
  EDGE_MODE_WRAP,
  EDGE_MODE_NONE,
} EdgeMode;


typedef enum
{
  STITCH_NO_STITCH,
  STITCH_STITCH,
} StitchTiles;


typedef enum
{
  BLEND_COMPOSITE,
  BLEND_NO_COMPOSITE,
} BlendComposite;

typedef enum
{
  COLOR_MATRIX_TYPE_MATRIX,
  COLOR_MATRIX_TYPE_SATURATE,
  COLOR_MATRIX_TYPE_HUE_ROTATE,
  COLOR_MATRIX_TYPE_LUMINANCE_TO_ALPHA,
} ColorMatrixType;

typedef enum
{
  COMPOSITE_OPERATOR_OVER,
  COMPOSITE_OPERATOR_IN,
  COMPOSITE_OPERATOR_OUT,
  COMPOSITE_OPERATOR_ATOP,
  COMPOSITE_OPERATOR_XOR,
  COMPOSITE_OPERATOR_LIGHTER,
  COMPOSITE_OPERATOR_ARITHMETIC,
} CompositeOperator;

typedef enum
{
  COMPONENT_TRANSFER_IDENTITY,
  COMPONENT_TRANSFER_TABLE,
  COMPONENT_TRANSFER_DISCRETE,
  COMPONENT_TRANSFER_LINEAR,
  COMPONENT_TRANSFER_GAMMA,
} ComponentTransferType;

typedef enum
{
  TURBULENCE_TYPE_FRACTAL_NOISE,
  TURBULENCE_TYPE_TURBULENCE,
} TurbulenceType;

typedef enum
{
  VECTOR_EFFECT_NONE,
  VECTOR_EFFECT_NON_SCALING_STROKE,
} VectorEffect;

typedef enum
{
  FONT_SIZE_SMALLER,
  FONT_SIZE_LARGER,
  FONT_SIZE_XX_SMALL,
  FONT_SIZE_X_SMALL,
  FONT_SIZE_SMALL,
  FONT_SIZE_MEDIUM,
  FONT_SIZE_LARGE,
  FONT_SIZE_X_LARGE,
  FONT_SIZE_XX_LARGE,
} FontSize;

typedef enum {
  FONT_WEIGHT_NORMAL,
  FONT_WEIGHT_BOLD,
  FONT_WEIGHT_BOLDER,
  FONT_WEIGHT_LIGHTER,
} FontWeight;

typedef enum
{
  BASELINE_SHIFT_SUB,
  BASELINE_SHIFT_SUPER,
  BASELINE_SHIFT_TOP,
  BASELINE_SHIFT_CENTER,
  BASELINE_SHIFT_BOTTOM,
} BaselineShift;

typedef enum
{
  COLOR_INTERPOLATION_AUTO,
  COLOR_INTERPOLATION_SRGB,
  COLOR_INTERPOLATION_LINEAR,
} ColorInterpolation;

typedef enum
{
  TRANSFORM_BOX_CONTENT_BOX,
  TRANSFORM_BOX_BORDER_BOX,
  TRANSFORM_BOX_FILL_BOX,
  TRANSFORM_BOX_STROKE_BOX,
  TRANSFORM_BOX_VIEW_BOX,
} TransformBox;

typedef enum
{
  SHAPE_RENDERING_AUTO,
  SHAPE_RENDERING_OPTIMIZE_SPEED,
  SHAPE_RENDERING_CRISP_EDGES,
  SHAPE_RENDERING_GEOMETRIC_PRECISION,
} ShapeRendering;

typedef enum
{
  TEXT_RENDERING_AUTO,
  TEXT_RENDERING_OPTIMIZE_SPEED,
  TEXT_RENDERING_OPTIMIZE_LEGIBILITY,
  TEXT_RENDERING_GEOMETRIC_PRECISION,
} TextRendering;


typedef enum
{
  IMAGE_RENDERING_AUTO,
  IMAGE_RENDERING_OPTIMIZE_QUALITY,
  IMAGE_RENDERING_OPTIMIZE_SPEED,
} ImageRendering;

typedef enum
{
  FILTER_NONE,
  FILTER_BLUR,
  FILTER_BRIGHTNESS,
  FILTER_CONTRAST,
  FILTER_GRAYSCALE,
  FILTER_HUE_ROTATE,
  FILTER_INVERT,
  FILTER_OPACITY,
  FILTER_SATURATE,
  FILTER_SEPIA,
  FILTER_REF,
  FILTER_DROPSHADOW,
} FilterKind;

typedef enum
{
  DASH_ARRAY_NONE,
  DASH_ARRAY_DASHES,
} DashArrayKind;

typedef enum
{
  MASK_NONE,
  MASK_URL,
} MaskKind;

typedef enum
{
  ORIENT_AUTO,
  ORIENT_ANGLE,
} OrientKind;

typedef enum
{
  HREF_NONE,
  HREF_PLAIN,
  HREF_URL,
} HrefKind;

typedef enum
{
  TEXT_DECORATION_NONE         = 0,
  TEXT_DECORATION_UNDERLINE    = 1 << 0,
  TEXT_DECORATION_OVERLINE     = 1 << 1,
  TEXT_DECORATION_LINE_THROUGH = 1 << 2,
} TextDecoration;

typedef enum
{
  FILTER_REF_DEFAULT_SOURCE,
  FILTER_REF_SOURCE_GRAPHIC,
  FILTER_REF_SOURCE_ALPHA,
  FILTER_REF_BACKGROUND_IMAGE,
  FILTER_REF_BACKGROUND_ALPHA,
  FILTER_REF_FILL_PAINT,
  FILTER_REF_STROKE_PAINT,
  FILTER_REF_BY_NAME,
} SvgFilterRefType;

typedef enum
{
  POINTER_EVENTS_AUTO,
  POINTER_EVENTS_BOUNDING_BOX,
  POINTER_EVENTS_VISIBLE_PAINTED,
  POINTER_EVENTS_VISIBLE_FILL,
  POINTER_EVENTS_VISIBLE_STROKE,
  POINTER_EVENTS_VISIBLE,
  POINTER_EVENTS_PAINTED,
  POINTER_EVENTS_FILL,
  POINTER_EVENTS_STROKE,
  POINTER_EVENTS_ALL,
  POINTER_EVENTS_NONE,
} PointerEvents;

typedef enum
{
  XML_SPACE_DEFAULT,
  XML_SPACE_PRESERVE,
} XmlSpace;

typedef enum
{
  GPA_TRANSITION_NONE,
  GPA_TRANSITION_ANIMATE,
  GPA_TRANSITION_MORPH,
  GPA_TRANSITION_FADE,
} GpaTransition;

typedef enum
{
  GPA_ANIMATION_NONE,
  GPA_ANIMATION_NORMAL,
  GPA_ANIMATION_ALTERNATE,
  GPA_ANIMATION_REVERSE,
  GPA_ANIMATION_REVERSE_ALTERNATE,
  GPA_ANIMATION_IN_OUT,
  GPA_ANIMATION_IN_OUT_ALTERNATE,
  GPA_ANIMATION_IN_OUT_REVERSE,
  GPA_ANIMATION_SEGMENT,
  GPA_ANIMATION_SEGMENT_ALTERNATE,
} GpaAnimation;

typedef enum
{
  GPA_EASING_LINEAR,
  GPA_EASING_EASE_IN_OUT,
  GPA_EASING_EASE_IN,
  GPA_EASING_EASE_OUT,
  GPA_EASING_EASE,
} GpaEasing;

G_END_DECLS
