/*
  shapes.h

  For Tux Paint
  List of available shapes.

  Copyright (c) 2002-2023 by Bill Kendrick and others
  bill@newbreedsoftware.com
  https://tuxpaint.org/

  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 2 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, write to the Free Software
  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  (See COPYING.txt)

  June 14, 2002 - April 9, 2023
*/


#ifndef gettext_noop
#define gettext_noop(String) String
#endif


/* What shapes are available: */

enum
{
  SHAPE_SQUARE,
  SHAPE_SQUARE_FILL,
  SHAPE_RECTANGLE,
  SHAPE_RECTANGLE_FILL,
  SHAPE_CIRCLE,
  SHAPE_CIRCLE_FILL,
  SHAPE_ELLIPSE,
  SHAPE_ELLIPSE_FILL,
  SHAPE_TRIANGLE,
  SHAPE_TRIANGLE_FILL,
  SHAPE_PENTAGON,
  SHAPE_PENTAGON_FILL,
  SHAPE_HEXAGON,
  SHAPE_HEXAGON_FILL,
  SHAPE_HEPTAGON,
  SHAPE_HEPTAGON_FILL,
  SHAPE_OCTAGON,
  SHAPE_OCTAGON_FILL,
  SHAPE_RHOMBUS,
  SHAPE_RHOMBUS_FILL,
  SHAPE_TRIANGLE_STAR,
  SHAPE_TRIANGLE_STAR_FILL,
  SHAPE_RHOMBUS_STAR,
  SHAPE_RHOMBUS_STAR_FILL,
  SHAPE_PENTAGON_STAR,
  SHAPE_PENTAGON_STAR_FILL,
  NUM_SHAPES
};


/* How many sides do they have? */

const int shape_sides[NUM_SHAPES] = {
  4,                            /* Square */
  4,                            /* Square */
  4,                            /* Rectangle */
  4,                            /* Rectangle */
  72,                           /* Circle */
  72,                           /* Circle */
  72,                           /* Ellipse */
  72,                           /* Ellipse */
  3,                            /* Triangle */
  3,                            /* Triangle */
  5,                            /* Pentagon */
  5,                            /* Pentagon */
  6,                            /* Hexagon */
  6,                            /* Hexagon */
  7,                            /* Heptagon */
  7,                            /* Heptagon */
  8,                            /* Octagon */
  8,                            /* Octagon */
  4,                            /* Rhombus */
  4,                            /* Rhombus */
  3,                            /* 3 points star */
  3,                            /* 3 points star */
  4,                            /* 4 points star */
  4,                            /* 4 points star */
  5,                            /* 5 points star */
  5,                            /* 5 points star */
};


/* Which shapes are 1:1 aspect? */

const int shape_locked[NUM_SHAPES] = {
  1,                            /* Square */
  1,                            /* Square */
  0,                            /* Rectangle */
  0,                            /* Rectangle */
  1,                            /* Circle */
  1,                            /* Circle */
  0,                            /* Ellipse */
  0,                            /* Ellipse */
  0,                            /* Triangle */
  0,                            /* Triangle */
  0,                            /* Pentagon */
  0,                            /* Pentagon */
  0,                            /* Hexagon */
  0,                            /* Hexagon */
  0,                            /* Heptagon */
  0,                            /* Heptagon */
  0,                            /* Octagon */
  0,                            /* Octagon */
  0,                            /* Rhombus */
  0,                            /* Rhombus */
  0,                            /* 3 points star */
  0,                            /* 3 points star */
  0,                            /* 4 points star */
  0,                            /* 4 points star */
  0,                            /* 5 points star */
  0,                            /* 5 points star */
};


/* Which shapes are filled? */

const int shape_filled[NUM_SHAPES] = {
  0,                            /* Square */
  1,                            /* Square */
  0,                            /* Rectangle */
  1,                            /* Rectangle */
  0,                            /* Circle */
  1,                            /* Circle */
  0,                            /* Ellipse */
  1,                            /* Ellipse */
  0,                            /* Triangle */
  1,                            /* Triangle */
  0,                            /* Pentagon */
  1,                            /* Pentagon */
  0,                            /* Hexagon */
  1,                            /* Hexagon */
  0,                            /* Heptagon */
  1,                            /* Heptagon */
  0,                            /* Octagon */
  1,                            /* Octagon */
  0,                            /* Rhombus */
  1,                            /* Rhombus */
  0,                            /* 3 points star */
  1,                            /* 3 points star */
  0,                            /* 4 points star */
  1,                            /* 4 points star */
  0,                            /* 5 points star */
  1,                            /* 5 points star */
};



/* Initial angles for shapes: */

const float shape_init_ang[NUM_SHAPES] = {
  45.0,                         /* Square */
  45.0,                         /* Square */
  45.0,                         /* Rectangle */
  45.0,                         /* Rectangle */
  0.0,                          /* Circle */
  0.0,                          /* Circle */
  0.0,                          /* Ellipse */
  0.0,                          /* Ellipse */
  210.0,                        /* Triangle ((360/3)+90) */
  210.0,                        /* Triangle ((360/3)+90) */
  162.0,                        /* Pentagon ((360/5)+90) */
  162.0,                        /* Pentagon ((360/5)+90) */
  150.0,                        /* Hexagon ((360/6)+90) */
  150.0,                        /* Hexagon ((360/6)+90) */
  141.42857143,                 /* Heptagon ((360/7)+90) */
  141.42857143,                 /* Heptagon ((360/7)+90) */
  22.5,                         /* Octagon ((360/8)/2 = 22.5) */
  22.5,                         /* Octagon ((360/8)/2 = 22.5) */
  0.0,                          /* Rhombus */
  0.0,                          /* Rhombus */
  210.0,                        /* 3 points star ((360/3)+90) */
  210.0,                        /* 3 points star ((360/3)+90) */
  0.0,                          /* 4 points star */
  0.0,                          /* 4 points star */
  162.0,                        /* 5 points star ((360/5)+90) */
  162.0,                        /* 5 points star ((360/5)+90) */
};


/* Shapes that don't make sense rotating (e.g., circles): */

const int shape_no_rotate[NUM_SHAPES] = {
  0,                            /* Square */
  0,                            /* Square */
  0,                            /* Rectangle */
  0,                            /* Rectangle */
  1,                            /* Circle */
  1,                            /* Circle */
  0,                            /* Ellipse */
  0,                            /* Ellipse */
  0,                            /* Triangle */
  0,                            /* Triangle */
  0,                            /* Pentagon */
  0,                            /* Pentagon */
  0,                            /* Hexagon */
  0,                            /* Hexagon */
  0,                            /* Heptagon */
  0,                            /* Heptagon */
  0,                            /* Octagon */
  0,                            /* Octagon */
  0,                            /* Rhombus */
  0,                            /* Rhombus */
  0,                            /* 3 points star */
  0,                            /* 3 points star */
  0,                            /* 4 points star */
  0,                            /* 4 points star */
  0,                            /* 5 points star */
  0,                            /* 5 points star */
};

/* Valley of stars in percent of size */

const int shape_valley[NUM_SHAPES] = {
  100,                          /* Square */
  100,                          /* Square */
  100,                          /* Rectangle */
  100,                          /* Rectangle */
  100,                          /* Circle */
  100,                          /* Circle */
  100,                          /* Ellipse */
  100,                          /* Ellipse */
  100,                          /* Triangle */
  100,                          /* Triangle */
  100,                          /* Pentagon */
  100,                          /* Pentagon */
  100,                          /* Hexagon */
  100,                          /* Hexagon */
  100,                          /* Heptagon */
  100,                          /* Heptagon */
  100,                          /* Octagon */
  100,                          /* Octagon */
  100,                          /* Rhombus */
  100,                          /* Rhombus */
  20,                           /* 3 points star */
  20,                           /* 3 points star */
  30,                           /* 4 points star */
  30,                           /* 4 points star */
  35,                           /* 5 points star */
  35,                           /* 5 points star */
};


/* Shape names: */

const char *const shape_names[NUM_SHAPES] = {
  // Square shape tool (4 equally-lengthed sides at right angles)
  gettext_noop("Square"),
  gettext_noop("Square"),

  // Rectangle shape tool (4 sides at right angles)
  gettext_noop("Rectangle"),
  gettext_noop("Rectangle"),

  // Circle shape tool (X radius and Y radius are the same)
  gettext_noop("Circle"),
  gettext_noop("Circle"),

  // Ellipse shape tool (X radius and Y radius may differ)
  gettext_noop("Ellipse"),
  gettext_noop("Ellipse"),

  // Triangle shape tool (3 sides)
  gettext_noop("Triangle"),
  gettext_noop("Triangle"),

  // Pentagon shape tool (5 sides)
  gettext_noop("Pentagon"),
  gettext_noop("Pentagon"),

  // Hexagon shape tool (6 sides)
  gettext_noop("Hexagon"),
  gettext_noop("Hexagon"),

  // Heptagon (aka septagon) shape tool (7 sides)
  gettext_noop("Heptagon"),
  gettext_noop("Heptagon"),

  // Octagon shape tool (8 sides)
  gettext_noop("Octagon"),
  gettext_noop("Octagon"),

  // Rhombus shape tool (4 sides, not at right angles)
  gettext_noop("Rhombus"),
  gettext_noop("Rhombus"),

  // Triangle star (3 points star)
  gettext_noop("Star"),
  gettext_noop("Star"),

  // Rhombus star (4 points star)
  gettext_noop("Star"),
  gettext_noop("Star"),

  // Pentagon star (5 points star)
  gettext_noop("Star"),
  gettext_noop("Star"),
};


/* Some text to write when each shape is selected: */

const char *const shape_tips[NUM_SHAPES] = {
  // Description of a square
  gettext_noop("A square is a rectangle with four equal sides."),
  gettext_noop("A square is a rectangle with four equal sides."),

  // Description of a rectangle
  gettext_noop("A rectangle has four sides and four right angles."),
  gettext_noop("A rectangle has four sides and four right angles."),

  // Description of a circle
  gettext_noop("A circle is a curve where all points have the same distance from the center."),
  gettext_noop("A circle is a curve where all points have the same distance from the center."),

  // Description of an ellipse
  gettext_noop("An ellipse is a stretched circle."),
  gettext_noop("An ellipse is a stretched circle."),

  // Description of a triangle
  gettext_noop("A triangle has three sides."),
  gettext_noop("A triangle has three sides."),

  // Description of a pentagon
  gettext_noop("A pentagon has five sides."),
  gettext_noop("A pentagon has five sides."),

  // Description of a hexagon
  gettext_noop("A hexagon has six sides."),
  gettext_noop("A hexagon has six sides."),

  // Description of a heptagon
  gettext_noop("A heptagon has seven sides."),
  gettext_noop("A heptagon has seven sides."),

  // Description of an octagon
  gettext_noop("An octagon has eight equal sides."),
  gettext_noop("An octagon has eight equal sides."),

  // Description of a rhombus
  gettext_noop("A rhombus has four equal sides, and opposite sides are parallel."),
  gettext_noop("A rhombus has four equal sides, and opposite sides are parallel."),

  // Description of triangle star (3 points star)
  gettext_noop("A star with 3 points."),
  gettext_noop("A star with 3 points."),

  // Description of rhombus star (4 points star)
  gettext_noop("A star with 4 points."),
  gettext_noop("A star with 4 points."),

  // Description of pentagon star (5 points star)
  gettext_noop("A star with 5 points."),
  gettext_noop("A star with 5 points."),
};


/* Shape icon filenames: */

const char *const shape_img_fnames[NUM_SHAPES] = {
  DATA_PREFIX "images/shapes/square.png",
  DATA_PREFIX "images/shapes/square_f.png",
  DATA_PREFIX "images/shapes/rectangle.png",
  DATA_PREFIX "images/shapes/rectangle_f.png",
  DATA_PREFIX "images/shapes/circle.png",
  DATA_PREFIX "images/shapes/circle_f.png",
  DATA_PREFIX "images/shapes/oval.png",
  DATA_PREFIX "images/shapes/oval_f.png",
  DATA_PREFIX "images/shapes/triangle.png",
  DATA_PREFIX "images/shapes/triangle_f.png",
  DATA_PREFIX "images/shapes/pentagon.png",
  DATA_PREFIX "images/shapes/pentagon_f.png",
  DATA_PREFIX "images/shapes/hexagon.png",
  DATA_PREFIX "images/shapes/hexagon_f.png",
  DATA_PREFIX "images/shapes/heptagon.png",
  DATA_PREFIX "images/shapes/heptagon_f.png",
  DATA_PREFIX "images/shapes/octagon.png",
  DATA_PREFIX "images/shapes/octagon_f.png",
  DATA_PREFIX "images/shapes/diamond.png",
  DATA_PREFIX "images/shapes/diamond_f.png",
  DATA_PREFIX "images/shapes/star3p.png",
  DATA_PREFIX "images/shapes/star3p_f.png",
  DATA_PREFIX "images/shapes/star4p.png",
  DATA_PREFIX "images/shapes/star4p_f.png",
  DATA_PREFIX "images/shapes/star5p.png",
  DATA_PREFIX "images/shapes/star5p_f.png",
};


/* Shape controls */

enum
{
  SHAPEMODE_CENTER,
  SHAPEMODE_CORNER,
  NUM_SHAPEMODES
};

const char *const shapemode_img_fnames[NUM_SHAPEMODES] = {
  DATA_PREFIX "images/ui/shapes_center.png",
  DATA_PREFIX "images/ui/shapes_corner.png"
};

/* String shown when Shapes tool is selected;
   one version for normal ("complex shapes"),
   the other for simplified mode ("simple shapes") */
enum
{
  SHAPE_COMPLEXITY_NORMAL,
  SHAPE_COMPLEXITY_SIMPLE,
  NUM_SHAPE_COMPLEXITIES
};

const char *const shape_tool_tips[NUM_SHAPE_COMPLEXITIES] = {
  gettext_noop
    ("Pick a shape. Click to start drawing, drag, and let go when it is the size and shape you want. Move around to rotate it, and click again to draw it."),
  gettext_noop("Pick a shape. Click to start drawing, drag, and let go when it is the size and shape you want.")
};

/* Strings shown when switching between "from center"
   and "from corner" modes */
const char *const shapemode_tips[NUM_SHAPES] = {
  gettext_noop("Draw shapes from the center."),
  gettext_noop("Draw shapes from a corner."),
};
