tuxpaint-pencil-sharpener/src/shapes.h
2023-04-23 23:26:00 -07:00

442 lines
15 KiB
C

/*
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."),
};