/* 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 __DISPLAY_ENUMS_H__
#define __DISPLAY_ENUMS_H__


#define PIKA_TYPE_BUTTON_PRESS_TYPE (pika_button_press_type_get_type ())

GType pika_button_press_type_get_type (void) G_GNUC_CONST;

typedef enum
{
  PIKA_BUTTON_PRESS_NORMAL,
  PIKA_BUTTON_PRESS_DOUBLE,
  PIKA_BUTTON_PRESS_TRIPLE
} PikaButtonPressType;


#define PIKA_TYPE_BUTTON_RELEASE_TYPE (pika_button_release_type_get_type ())

GType pika_button_release_type_get_type (void) G_GNUC_CONST;

typedef enum
{
  PIKA_BUTTON_RELEASE_NORMAL,
  PIKA_BUTTON_RELEASE_CANCEL,
  PIKA_BUTTON_RELEASE_CLICK,
  PIKA_BUTTON_RELEASE_NO_MOTION
} PikaButtonReleaseType;


#define PIKA_TYPE_COMPASS_ORIENTATION (pika_compass_orientation_get_type ())

GType pika_compass_orientation_get_type (void) G_GNUC_CONST;

typedef enum
{
  PIKA_COMPASS_ORIENTATION_AUTO,       /*< desc="Auto"       >*/
  PIKA_COMPASS_ORIENTATION_HORIZONTAL, /*< desc="Horizontal" >*/
  PIKA_COMPASS_ORIENTATION_VERTICAL    /*< desc="Vertical"   >*/
} PikaCompassOrientation;


#define PIKA_TYPE_CURSOR_PRECISION (pika_cursor_precision_get_type ())

GType pika_cursor_precision_get_type (void) G_GNUC_CONST;

typedef enum
{
  PIKA_CURSOR_PRECISION_PIXEL_CENTER,
  PIKA_CURSOR_PRECISION_PIXEL_BORDER,
  PIKA_CURSOR_PRECISION_SUBPIXEL
} PikaCursorPrecision;


#define PIKA_TYPE_GUIDES_TYPE (pika_guides_type_get_type ())

GType pika_guides_type_get_type (void) G_GNUC_CONST;

typedef enum
{
  PIKA_GUIDES_NONE,          /*< desc="No guides"       >*/
  PIKA_GUIDES_CENTER_LINES,  /*< desc="Center lines"    >*/
  PIKA_GUIDES_THIRDS,        /*< desc="Rule of thirds"  >*/
  PIKA_GUIDES_FIFTHS,        /*< desc="Rule of fifths"  >*/
  PIKA_GUIDES_GOLDEN,        /*< desc="Golden sections" >*/
  PIKA_GUIDES_DIAGONALS,     /*< desc="Diagonal lines"  >*/
  PIKA_GUIDES_N_LINES,       /*< desc="Number of lines" >*/
  PIKA_GUIDES_SPACING        /*< desc="Line spacing"    >*/
} PikaGuidesType;


#define PIKA_TYPE_HANDLE_TYPE (pika_handle_type_get_type ())

GType pika_handle_type_get_type (void) G_GNUC_CONST;

typedef enum
{
  PIKA_HANDLE_SQUARE,
  PIKA_HANDLE_DASHED_SQUARE,
  PIKA_HANDLE_FILLED_SQUARE,
  PIKA_HANDLE_CIRCLE,
  PIKA_HANDLE_DASHED_CIRCLE,
  PIKA_HANDLE_FILLED_CIRCLE,
  PIKA_HANDLE_DIAMOND,
  PIKA_HANDLE_DASHED_DIAMOND,
  PIKA_HANDLE_FILLED_DIAMOND,
  PIKA_HANDLE_CROSS,
  PIKA_HANDLE_CROSSHAIR,
  PIKA_HANDLE_DROP,
  PIKA_HANDLE_FILLED_DROP
} PikaHandleType;


#define PIKA_TYPE_HANDLE_ANCHOR (pika_handle_anchor_get_type ())

GType pika_handle_anchor_get_type (void) G_GNUC_CONST;

typedef enum
{
  PIKA_HANDLE_ANCHOR_CENTER,
  PIKA_HANDLE_ANCHOR_NORTH,
  PIKA_HANDLE_ANCHOR_NORTH_WEST,
  PIKA_HANDLE_ANCHOR_NORTH_EAST,
  PIKA_HANDLE_ANCHOR_SOUTH,
  PIKA_HANDLE_ANCHOR_SOUTH_WEST,
  PIKA_HANDLE_ANCHOR_SOUTH_EAST,
  PIKA_HANDLE_ANCHOR_WEST,
  PIKA_HANDLE_ANCHOR_EAST
} PikaHandleAnchor;


#define PIKA_TYPE_LIMIT_TYPE (pika_limit_type_get_type ())

GType pika_limit_type_get_type (void) G_GNUC_CONST;

typedef enum
{
  PIKA_LIMIT_CIRCLE,
  PIKA_LIMIT_SQUARE,
  PIKA_LIMIT_DIAMOND,
  PIKA_LIMIT_HORIZONTAL,
  PIKA_LIMIT_VERTICAL
} PikaLimitType;


#define PIKA_TYPE_PATH_STYLE (pika_path_style_get_type ())

GType pika_path_style_get_type (void) G_GNUC_CONST;

typedef enum
{
  PIKA_PATH_STYLE_DEFAULT,
  PIKA_PATH_STYLE_VECTORS,
  PIKA_PATH_STYLE_OUTLINE
} PikaPathStyle;


#define PIKA_TYPE_RECTANGLE_CONSTRAINT (pika_rectangle_constraint_get_type ())

GType pika_rectangle_constraint_get_type (void) G_GNUC_CONST;

typedef enum
{
  PIKA_RECTANGLE_CONSTRAIN_NONE,
  PIKA_RECTANGLE_CONSTRAIN_IMAGE,
  PIKA_RECTANGLE_CONSTRAIN_DRAWABLE
} PikaRectangleConstraint;


#define PIKA_TYPE_RECTANGLE_FIXED_RULE (pika_rectangle_fixed_rule_get_type ())

GType pika_rectangle_fixed_rule_get_type (void) G_GNUC_CONST;

typedef enum
{
  PIKA_RECTANGLE_FIXED_ASPECT, /*< desc="Aspect ratio" >*/
  PIKA_RECTANGLE_FIXED_WIDTH,  /*< desc="Width"        >*/
  PIKA_RECTANGLE_FIXED_HEIGHT, /*< desc="Height"       >*/
  PIKA_RECTANGLE_FIXED_SIZE,   /*< desc="Size"         >*/
} PikaRectangleFixedRule;


#define PIKA_TYPE_RECTANGLE_PRECISION (pika_rectangle_precision_get_type ())

GType pika_rectangle_precision_get_type (void) G_GNUC_CONST;

typedef enum
{
  PIKA_RECTANGLE_PRECISION_INT,
  PIKA_RECTANGLE_PRECISION_DOUBLE,
} PikaRectanglePrecision;


#define PIKA_TYPE_TRANSFORM_3D_MODE (pika_transform_3d_mode_get_type ())

GType pika_transform_3d_mode_get_type (void) G_GNUC_CONST;

typedef enum /*< lowercase_name=pika_transform_3d_mode >*/
{
  PIKA_TRANSFORM_3D_MODE_CAMERA,
  PIKA_TRANSFORM_3D_MODE_MOVE,
  PIKA_TRANSFORM_3D_MODE_ROTATE
} PikaTransform3DMode;


#define PIKA_TYPE_TRANSFORM_FUNCTION (pika_transform_function_get_type ())

GType pika_transform_function_get_type (void) G_GNUC_CONST;

typedef enum
{
  PIKA_TRANSFORM_FUNCTION_NONE,
  PIKA_TRANSFORM_FUNCTION_MOVE,
  PIKA_TRANSFORM_FUNCTION_SCALE,
  PIKA_TRANSFORM_FUNCTION_ROTATE,
  PIKA_TRANSFORM_FUNCTION_SHEAR,
  PIKA_TRANSFORM_FUNCTION_PERSPECTIVE
} PikaTransformFunction;


#define PIKA_TYPE_TRANSFORM_HANDLE_MODE (pika_transform_handle_mode_get_type ())

GType pika_transform_handle_mode_get_type (void) G_GNUC_CONST;

typedef enum
{
  PIKA_HANDLE_MODE_ADD_TRANSFORM, /*< desc="Add / Transform" >*/
  PIKA_HANDLE_MODE_MOVE,          /*< desc="Move"            >*/
  PIKA_HANDLE_MODE_REMOVE         /*< desc="Remove"          >*/
} PikaTransformHandleMode;


#define PIKA_TYPE_VECTOR_MODE (pika_vector_mode_get_type ())

GType pika_vector_mode_get_type (void) G_GNUC_CONST;

typedef enum
{
  PIKA_VECTOR_MODE_DESIGN,      /*< desc="Design" >*/
  PIKA_VECTOR_MODE_EDIT,        /*< desc="Edit"   >*/
  PIKA_VECTOR_MODE_MOVE         /*< desc="Move"   >*/
} PikaVectorMode;


#define PIKA_TYPE_ZOOM_FOCUS (pika_zoom_focus_get_type ())

GType pika_zoom_focus_get_type (void) G_GNUC_CONST;

typedef enum
{
  /* Make a best guess */
  PIKA_ZOOM_FOCUS_BEST_GUESS,

  /* Use the mouse cursor (if within canvas) */
  PIKA_ZOOM_FOCUS_POINTER,

  /* Use the image center */
  PIKA_ZOOM_FOCUS_IMAGE_CENTER,

  /* If the image is centered, retain the centering. Else use
   * _BEST_GUESS
   */
  PIKA_ZOOM_FOCUS_RETAIN_CENTERING_ELSE_BEST_GUESS

} PikaZoomFocus;


#define PIKA_TYPE_MODIFIER_ACTION (pika_modifier_action_get_type ())

GType pika_modifier_action_get_type (void) G_GNUC_CONST;

typedef enum
{
  PIKA_MODIFIER_ACTION_NONE,                    /*< desc="No action"                                  >*/
  PIKA_MODIFIER_ACTION_PANNING,                 /*< desc="Pan"                                        >*/
  PIKA_MODIFIER_ACTION_ZOOMING,                 /*< desc="Zoom"                                       >*/
  PIKA_MODIFIER_ACTION_ROTATING,                /*< desc="Rotate View"                                >*/
  PIKA_MODIFIER_ACTION_STEP_ROTATING,           /*< desc="Rotate View by 15 degree steps"             >*/
  PIKA_MODIFIER_ACTION_LAYER_PICKING,           /*< desc="Pick a layer"                               >*/

  PIKA_MODIFIER_ACTION_MENU,                    /*< desc="Display the menu"                           >*/

  PIKA_MODIFIER_ACTION_ACTION,                  /*< desc="Custom action"                              >*/

  PIKA_MODIFIER_ACTION_BRUSH_PIXEL_SIZE,        /*< desc="Change brush size in canvas pixels"         >*/
  PIKA_MODIFIER_ACTION_BRUSH_RADIUS_PIXEL_SIZE, /*< desc="Change brush radius' size in canvas pixels" >*/
  PIKA_MODIFIER_ACTION_TOOL_OPACITY,            /*< desc="Change tool opacity"                        >*/
} PikaModifierAction;


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


typedef enum  /*< pdb-skip, skip >*/
{
  PIKA_HIT_NONE,
  PIKA_HIT_INDIRECT,
  PIKA_HIT_DIRECT
} PikaHit;


#endif /* __DISPLAY_ENUMS_H__ */
