/* PIKA - Photo and Image Kooker Application
 * a rebranding of The GNU Image Manipulation Program (created with heckimp)
 * A derived work which may be trivial. However, any changes may be (C)2023 by Aldercone Studio
 *
 * Original copyright, applying to most contents (license remains unchanged): 
 * Copyright (C) 1995 Spencer Kimball and Peter Mattis
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program 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 General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <https://www.gnu.org/licenses/>.
 */

#ifndef __TOOLS_ENUMS_H__
#define __TOOLS_ENUMS_H__


/*
 * these enums are registered with the type system
 */

/**
 * PikaBucketFillArea:
 * @PIKA_BUCKET_FILL_SELECTION:      Fill whole selection
 * @PIKA_BUCKET_FILL_SIMILAR_COLORS: Fill similar colors
 * @PIKA_BUCKET_FILL_LINE_ART:       Fill by line art detection
 *
 * Bucket fill area.
 */
#define PIKA_TYPE_BUCKET_FILL_AREA (pika_bucket_fill_area_get_type ())

GType pika_bucket_fill_area_get_type (void) G_GNUC_CONST;

typedef enum
{
  PIKA_BUCKET_FILL_SELECTION,       /*< desc="Fill whole selection" >*/
  PIKA_BUCKET_FILL_SIMILAR_COLORS,  /*< desc="Fill similar colors" >*/
  PIKA_BUCKET_FILL_LINE_ART         /*< desc="Fill by line art detection" >*/
} PikaBucketFillArea;


/**
 * PikaLineArtSource:
 * @PIKA_LINE_ART_SOURCE_SAMPLE_MERGED: All visible layers
 * @PIKA_LINE_ART_SOURCE_ACTIVE_LAYER:  Active layer
 * @PIKA_LINE_ART_SOURCE_LOWER_LAYER:   Layer below the active one
 * @PIKA_LINE_ART_SOURCE_UPPER_LAYER:   Layer above the active one
 *
 * Bucket fill area.
 */
#define PIKA_TYPE_LINE_ART_SOURCE (pika_line_art_source_get_type ())

GType pika_line_art_source_get_type (void) G_GNUC_CONST;

typedef enum
{
  PIKA_LINE_ART_SOURCE_SAMPLE_MERGED, /*< desc="All visible layers" >*/
  PIKA_LINE_ART_SOURCE_ACTIVE_LAYER,  /*< desc="Selected layer" >*/
  PIKA_LINE_ART_SOURCE_LOWER_LAYER,   /*< desc="Layer below the selected one" >*/
  PIKA_LINE_ART_SOURCE_UPPER_LAYER    /*< desc="Layer above the selected one" >*/
} PikaLineArtSource;


#define PIKA_TYPE_RECT_SELECT_MODE (pika_rect_select_mode_get_type ())

GType pika_rect_select_mode_get_type (void) G_GNUC_CONST;

typedef enum
{
  PIKA_RECT_SELECT_MODE_FREE,        /*< desc="Free select"        >*/
  PIKA_RECT_SELECT_MODE_FIXED_SIZE,  /*< desc="Fixed size"         >*/
  PIKA_RECT_SELECT_MODE_FIXED_RATIO  /*< desc="Fixed aspect ratio" >*/
} PikaRectSelectMode;


#define PIKA_TYPE_TRANSFORM_TYPE (pika_transform_type_get_type ())

GType pika_transform_type_get_type (void) G_GNUC_CONST;

typedef enum
{
  PIKA_TRANSFORM_TYPE_LAYER,     /*< desc="Layer"     >*/
  PIKA_TRANSFORM_TYPE_SELECTION, /*< desc="Selection" >*/
  PIKA_TRANSFORM_TYPE_PATH,      /*< desc="Path"      >*/
  PIKA_TRANSFORM_TYPE_IMAGE      /*< desc="Image"     >*/
} PikaTransformType;


#define PIKA_TYPE_TOOL_ACTION (pika_tool_action_get_type ())

GType pika_tool_action_get_type (void) G_GNUC_CONST;

typedef enum
{
  PIKA_TOOL_ACTION_PAUSE,
  PIKA_TOOL_ACTION_RESUME,
  PIKA_TOOL_ACTION_HALT,
  PIKA_TOOL_ACTION_COMMIT
} PikaToolAction;


#define PIKA_TYPE_TOOL_ACTIVE_MODIFIERS (pika_tool_active_modifiers_get_type ())

GType pika_tool_active_modifiers_get_type (void) G_GNUC_CONST;

typedef enum
{
  PIKA_TOOL_ACTIVE_MODIFIERS_OFF,
  PIKA_TOOL_ACTIVE_MODIFIERS_SAME,
  PIKA_TOOL_ACTIVE_MODIFIERS_SEPARATE,
} PikaToolActiveModifiers;


#define PIKA_TYPE_MATTING_DRAW_MODE (pika_matting_draw_mode_get_type ())

GType pika_matting_draw_mode_get_type (void) G_GNUC_CONST;

typedef enum
{
 PIKA_MATTING_DRAW_MODE_FOREGROUND,   /*< desc="Draw foreground" >*/
 PIKA_MATTING_DRAW_MODE_BACKGROUND,   /*< desc="Draw background" >*/
 PIKA_MATTING_DRAW_MODE_UNKNOWN,      /*< desc="Draw unknown" >*/
} PikaMattingDrawMode;


#define PIKA_TYPE_MATTING_PREVIEW_MODE (pika_matting_preview_mode_get_type ())

GType pika_matting_preview_mode_get_type (void) G_GNUC_CONST;

typedef enum
{
 PIKA_MATTING_PREVIEW_MODE_ON_COLOR,        /*< desc="Color" >*/
 PIKA_MATTING_PREVIEW_MODE_GRAYSCALE,       /*< desc="Grayscale" >*/
} PikaMattingPreviewMode;


#define PIKA_TYPE_TRANSFORM_3D_LENS_MODE (pika_transform_3d_lens_mode_get_type ())

GType pika_transform_3d_lens_mode_get_type (void) G_GNUC_CONST;

typedef enum /*< lowercase_name=pika_transform_3d_lens_mode >*/
{
  PIKA_TRANSFORM_3D_LENS_MODE_FOCAL_LENGTH, /*< desc="Focal length" >*/
  PIKA_TRANSFORM_3D_LENS_MODE_FOV_IMAGE,    /*< desc="Field of view (relative to image)", abbrev="FOV (image)" >*/
  PIKA_TRANSFORM_3D_LENS_MODE_FOV_ITEM,     /*< desc="Field of view (relative to item)", abbrev="FOV (item)" >*/
} Pika3DTransformLensMode;


#define PIKA_TYPE_WARP_BEHAVIOR (pika_warp_behavior_get_type ())

GType pika_warp_behavior_get_type (void) G_GNUC_CONST;

typedef enum
{
  PIKA_WARP_BEHAVIOR_MOVE,      /*< desc="Move pixels" >*/
  PIKA_WARP_BEHAVIOR_GROW,      /*< desc="Grow area" >*/
  PIKA_WARP_BEHAVIOR_SHRINK,    /*< desc="Shrink area" >*/
  PIKA_WARP_BEHAVIOR_SWIRL_CW,  /*< desc="Swirl clockwise" >*/
  PIKA_WARP_BEHAVIOR_SWIRL_CCW, /*< desc="Swirl counter-clockwise" >*/
  PIKA_WARP_BEHAVIOR_ERASE,     /*< desc="Erase warping" >*/
  PIKA_WARP_BEHAVIOR_SMOOTH     /*< desc="Smooth warping" >*/
} PikaWarpBehavior;


#define PIKA_TYPE_PAINT_SELECT_MODE (pika_paint_select_mode_get_type ())

GType pika_paint_select_mode_get_type (void) G_GNUC_CONST;

typedef enum
{
  PIKA_PAINT_SELECT_MODE_ADD,      /*< desc="Add to selection" >*/
  PIKA_PAINT_SELECT_MODE_SUBTRACT, /*< desc="Subtract from selection" >*/
} PikaPaintSelectMode;

/*
 * non-registered enums; register them if needed
 */

typedef enum /*< skip >*/
{
  SELECTION_SELECT,
  SELECTION_MOVE_MASK,
  SELECTION_MOVE,
  SELECTION_MOVE_COPY,
  SELECTION_ANCHOR
} SelectFunction;

/*  Modes of PikaEditSelectionTool  */
typedef enum /*< skip >*/
{
  PIKA_TRANSLATE_MODE_VECTORS,
  PIKA_TRANSLATE_MODE_CHANNEL,
  PIKA_TRANSLATE_MODE_LAYER_MASK,
  PIKA_TRANSLATE_MODE_MASK,
  PIKA_TRANSLATE_MODE_MASK_TO_LAYER,
  PIKA_TRANSLATE_MODE_MASK_COPY_TO_LAYER,
  PIKA_TRANSLATE_MODE_LAYER,
  PIKA_TRANSLATE_MODE_FLOATING_SEL
} PikaTranslateMode;

/*  Motion event report modes  */
typedef enum /*< skip >*/
{
  PIKA_MOTION_MODE_EXACT,
  PIKA_MOTION_MODE_COMPRESS
} PikaMotionMode;


#endif /* __TOOLS_ENUMS_H__ */
