grafX2/const.h
Yves Rizoud 22b5dc56e5 Loading of Layer icons (unused atm.)
git-svn-id: svn://pulkomandy.tk/GrafX2/trunk@1189 416bcca6-2ee7-4201-b75f-2eb2f807beb1
2009-11-14 23:04:06 +00:00

482 lines
18 KiB
C
Raw Blame History

/* vim:expandtab:ts=2 sw=2:
*/
/* Grafx2 - The Ultimate 256-color bitmap paint program
Copyright 2008 Yves Rizoud
Copyright 2007 Adrien Destugues
Copyright 1996-2001 Sunset Design (Guillaume Dorme & Karl Maritaud)
Grafx2 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; version 2
of the License.
Grafx2 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 Grafx2; if not, see <http://www.gnu.org/licenses/>
*/
//////////////////////////////////////////////////////////////////////////////
///@file const.h
/// Constants (preprocessor defines) and enumerations used anywhere.
//////////////////////////////////////////////////////////////////////////////
#ifndef _CONST_H_
#define _CONST_H_
#define M_2PI 6.28318530717958647692528676656 ///< Hmm, pie...
#define VERSION1 2 ///< Version number for gfx2.cfg (1/4)
#define VERSION2 0 ///< Version number for gfx2.cfg (2/4)
#define BETA1 98 ///< Version number for gfx2.cfg (3/4)
#define BETA2 0 ///< Version number for gfx2.cfg (4/4)
#define MAX_VIDEO_MODES 100 ///< Maximum number of video modes Grafx2 can propose.
#define NB_SHORTCUTS 181 ///< Number of actions that can have a key combination associated to it.
#define NB_ZOOM_FACTORS 12 ///< Number of zoom levels available in the magnifier.
#define MENU_WIDTH 254 ///< Width of the menu (not counting the palette)
#define MENU_HEIGHT 44 ///< Height of the menu.
#define NB_CURSOR_SPRITES 8 ///< Number of available mouse cursor sprites.
#define CURSOR_SPRITE_WIDTH 15 ///< Width of a mouse cursor sprite.
#define CURSOR_SPRITE_HEIGHT 15 ///< Height of a mouse cursor sprite.
#define NB_EFFECTS_SPRITES 9 ///< Number of effect sprites.
#define NB_MENU_SPRITES 20 ///< Number of menu sprites.
#define MENU_SPRITE_WIDTH 14 ///< Width of a menu sprite in pixels
#define MENU_SPRITE_HEIGHT 14 ///< Height of a menu sprite in pixels
#define LAYER_SPRITE_WIDTH 14 ///< Width of a layer button in pixels
#define LAYER_SPRITE_HEIGHT 10 ///< Height of a layer button in pixels
#define PAINTBRUSH_WIDTH 16 ///< Width of a preset paintbrush sprite
#define PAINTBRUSH_HEIGHT 16 ///< Height of a preset paintbrush sprite
#define MAX_PAINTBRUSH_SIZE 127 ///< Max size for a resizable paintbrush
#define ICON_SPRITE_WIDTH 8 ///< Width of an icon in pixels
#define ICON_SPRITE_HEIGHT 8 ///< Height of an icon in pixels
#define NB_PAINTBRUSH_SPRITES 48 ///< Number of preset paintbrushes
#define NB_PRESET_SIEVE 12 ///< Number of preset sieve patterns
#define OPERATION_STACK_SIZE 16 ///< Max number of parameters in the operation stack.
#define MAX_DISPLAYABLE_PATH 37 ///< Max number of characters to display directory name, in Save/Load screens.
#define COMMENT_SIZE 32 ///< Max number of characters for a comment in PKM or PNG file.
#define NB_MAX_PAGES_UNDO 99 ///< Max number of undo pages
#define DEFAULT_ZOOM_FACTOR 4 ///< Initial zoom factor for the magnifier.
#define MAX_PATH_CHARACTERS 260 ///< Number of characters for a file+complete path. Adapt to your OS...
#define NB_BOOKMARKS 4 ///< Number of bookmark buttons in Save/Load screen.
// Character to show a right arrow, used when editing long strings. It's present in ::Gfx->System_font
#define RIGHT_TRIANGLE_CHARACTER 16
// Character to show a left arrow, used when editing long strings. It's present in ::Gfx->System_font
#define LEFT_TRIANGLE_CHARACTER 17
/// Character to display in menus for an ellipsis.
#define ELLIPSIS_CHARACTER '<27>'
#define NB_LAYERS 1 ///< Initial number of layers for a new image
#define BRUSH_CONTAINER_PREVIEW_WIDTH 16 ///< Size for preview of a brush in Brush container
#define BRUSH_CONTAINER_PREVIEW_HEIGHT 16 ///< Size for preview of a brush in Brush container
#define BRUSH_CONTAINER_COLUMNS 4 ///< Number of columns in the Brush container
#define BRUSH_CONTAINER_ROWS 3 ///< Number of rows in the Brush container
///
/// We force the dynamic backup page allocation to leave a minimum of
/// 256Kb of free memory, to allow the rest of the program to work safely.
/// Note: This is a remainder of the DOS version. This system might not work
/// so well on other OSes, where the "available memory" changes due to external
/// factors.
#define MINIMAL_MEMORY_TO_RESERVE (256*1024)
#define LEFT_SIDE 1 ///< Indicates a left side or left-click
#define RIGHT_SIDE 2 ///< Indicates a right side or right-click
#define SEPARATOR_WIDTH 6 ///< Width of the separator between the normal and the zoomed view
#define INITIAL_SEPARATOR_PROPORTION 0.3 ///< Proportion of the normal view width, relative to the whole screen width.
#define NB_ZOOMED_PIXELS_MIN 4 ///< Minimal number of pixel shown (in width) by the zoomed view. (Note: below 4, you can't scroll!)
#if defined(__MORPHOS__) || defined(__amigaos4__) || defined(__amigaos__)
#define PARENT_DIR "/"
#else
/// Filename that means "parent directory" for your operating system.
#define PARENT_DIR ".."
#endif
/// List of file formats recognized by grafx2
enum FILE_FORMATS
{
FORMAT_ALL_IMAGES=0, ///< This is not really a file format, it's reserverd for a compilation of all file extensions
FORMAT_ALL_FILES=1, ///< This is not really a file format, it's reserverd for the "*.*" filter option.
FORMAT_PNG,
FORMAT_GIF,
FORMAT_BMP,
FORMAT_PCX,
FORMAT_PKM,
FORMAT_LBM,
FORMAT_IMG,
FORMAT_SCx,
FORMAT_PI1,
FORMAT_PC1,
FORMAT_CEL,
FORMAT_NEO,
FORMAT_C64,
FORMAT_KCF,
FORMAT_PAL,
FORMAT_SCR,
FORMAT_MISC, ///< Must be last of enum: others formats recognized by SDL_image
};
/// Default format for 'save as'
#define DEFAULT_FILEFORMAT FORMAT_GIF
/// Error codes for ::Error()
enum ERROR_CODES
{
ERROR_WARNING=0, ///< Red flash on screen, non-fatal error
ERROR_GUI_MISSING, ///< The graphics file is missing
ERROR_GUI_CORRUPTED, ///< The graphics file cannot be parsed for GUI elements
ERROR_INI_MISSING, ///< File gfx2def.ini is missing
ERROR_CFG_MISSING, ///< File gfx2.cfg is missing (non-fatal)
ERROR_CFG_CORRUPTED, ///< File gfx2.cfg couldn't be parsed (non-fatal)
ERROR_CFG_OLD, ///< Unknown version of gfx2.cfg : either VERY old or wrong file (non-fatal)
ERROR_MEMORY, ///< Out of memory
ERROR_COMMAND_LINE, ///< Error in command-line arguments (syntax, or couldn't find the file to open)
ERROR_FORBIDDEN_MODE, ///< Graphics mode requested is not supported
ERROR_SAVING_CFG, ///< Error while writing gfx2.cfg
ERROR_MISSING_DIRECTORY, ///< Unable to return to the original "current directory" on program exit
ERROR_INI_CORRUPTED, ///< File gfx2.ini couldn't be parsed
ERROR_SAVING_INI, ///< Error while writing gfx2.ini
ERROR_SORRY_SORRY_SORRY ///< (Page allocation error that shouldn't ever happen, now)
};
/// Available pixel scalers
enum PIXEL_RATIO
{
PIXEL_SIMPLE=0, ///< Use real pixels
PIXEL_WIDE, ///< Use wide pixels (2x1) like on Amstrad CPC mode 0
PIXEL_TALL, ///< Use tall pixels (1x2) like on Amstrad CPC mode 2
PIXEL_DOUBLE, ///< Use big pixels (2x2) if your LCD screen can't do lowres by itself
PIXEL_TRIPLE, ///< Use really big pixels (3x3)
PIXEL_WIDE2, ///< Use big wide pixels (4x2)
PIXEL_TALL2, ///< Use big tall pixels (2x4)
PIXEL_QUAD, ///< Use really giant pixels (4x4). You need to have a screen resolution at least 1280x800 to use this one
PIXEL_MAX ///< Number of elements in enum
};
/// Different kinds of menu button behavior.
enum FAMILY_OF_BUTTONS
{
FAMILY_TOOL=1, ///< Drawing tools (example : Freehand draw)
FAMILY_INTERRUPTION, ///< Temporary operation (example : choosing paintbrush) > Interrupts the current operation to do something, then come back.
FAMILY_INSTANT, ///< Single-click action (example : choose a color in palette) > It will be over as soon as we exit the called function.
FAMILY_TOOLBAR, ///< Hide/show the menu
FAMILY_EFFECTS ///< Effects
};
/// The different kinds of buttons in menus or windows.
enum BUTTON_SHAPES
{
BUTTON_SHAPE_NO_FRAME, ///< Ex: the palette
BUTTON_SHAPE_RECTANGLE, ///< Ex: Most buttons.
BUTTON_SHAPE_TRIANGLE_TOP_LEFT, ///< Ex: Empty rectangles.
BUTTON_SHAPE_TRIANGLE_BOTTOM_RIGHT ///< Ex: Filled rectangles.
};
/// The different "mouse cursor" shapes
enum CURSOR_SHAPES
{
CURSOR_SHAPE_ARROW,
CURSOR_SHAPE_TARGET, ///< This one uses the paintbrush
CURSOR_SHAPE_COLORPICKER, ///< This one uses the paintbrush
CURSOR_SHAPE_HOURGLASS,
CURSOR_SHAPE_MULTIDIRECTIONAL,
CURSOR_SHAPE_HORIZONTAL,
CURSOR_SHAPE_THIN_TARGET, ///< This one uses the paintbrush
CURSOR_SHAPE_THIN_COLORPICKER, ///< This one uses the paintbrush
CURSOR_SHAPE_XOR_TARGET,
CURSOR_SHAPE_XOR_RECTANGLE,
CURSOR_SHAPE_XOR_ROTATION
};
/// The different shapes that can be used as a paintbrush (paintbrush types go in the beginning)
enum PAINTBRUSH_SHAPES
{
PAINTBRUSH_SHAPE_ROUND,
PAINTBRUSH_SHAPE_SQUARE,
PAINTBRUSH_SHAPE_HORIZONTAL_BAR,
PAINTBRUSH_SHAPE_VERTICAL_BAR,
PAINTBRUSH_SHAPE_SLASH,
PAINTBRUSH_SHAPE_ANTISLASH,
PAINTBRUSH_SHAPE_RANDOM, ///< Random pixels in a circle shape, like an airbrush.
PAINTBRUSH_SHAPE_CROSS,
PAINTBRUSH_SHAPE_PLUS,
PAINTBRUSH_SHAPE_DIAMOND,
PAINTBRUSH_SHAPE_SIEVE_ROUND,
PAINTBRUSH_SHAPE_SIEVE_SQUARE,
PAINTBRUSH_SHAPE_MISC, ///< A raw monochrome bitmap, can't be resized. This must be the last of the preset paintbrush types.
PAINTBRUSH_SHAPE_POINT, ///< Used to reduce the paintbrush to a single pixel, during operations like colorpicker.
PAINTBRUSH_SHAPE_COLOR_BRUSH, ///< User's brush, in color mode
PAINTBRUSH_SHAPE_MONO_BRUSH, ///< User's brush, in mono mode
PAINTBRUSH_SHAPE_MAX ///< Upper limit.
};
/// Normal resting state for a menu button.
#define BUTTON_RELEASED 0
/// State of a menu button that is being pressed.
#define BUTTON_PRESSED 1
/// The different modes of the Shade
enum SHADE_MODES
{
SHADE_MODE_NORMAL,
SHADE_MODE_LOOP,
SHADE_MODE_NOSAT
};
/// Identifiers for the chunks (data blocks) of gfx2.cfg
enum CHUNKS_CFG
{
CHUNK_KEYS = 0, ///< Shortcut keys definitions
CHUNK_VIDEO_MODES = 1, ///< List of video modes
CHUNK_SHADE = 2, ///< Shade settings
CHUNK_MASK = 3, ///< Mask settings
CHUNK_STENCIL = 4, ///< Stencil settings
CHUNK_GRADIENTS = 5, ///< Gradients
CHUNK_SMOOTH = 6, ///< Smooth effect settings
CHUNK_EXCLUDE_COLORS = 7, ///< List of excluded colors
CHUNK_QUICK_SHADE = 8, ///< QShade effect settings
CHUNK_GRID = 9,
CHUNK_MAX
};
/// Identifiers for the 8x8 icons of ::Gfx->Icon_sprite (most are unused now)
enum ICON_TYPES
{
ICON_FLOPPY_3_5=0, ///< 3.5 Floppy disk
ICON_FLOPPY_5_25, ///< 5.25 Floppy disk
ICON_HDD, ///< Hard disk drive
ICON_CDROM, ///< CD-ROM
ICON_NETWORK, ///< "Network" drive
ICON_STAR, ///< Star (favorite)
ICON_DROPDOWN, ///< Dropdown arrow
NB_ICON_SPRITES ///< Number of 8x8 icons
};
/// Identifiers for the buttons in the menu.
enum BUTTON_NUMBERS
{
// Status bar
BUTTON_HIDE = 0,
// Layer bar
BUTTON_LAYER_MENU,
BUTTON_LAYER_COLOR,
BUTTON_LAYER_MERGE,
BUTTON_LAYER_ADD,
BUTTON_LAYER_REMOVE,
BUTTON_LAYER_UP,
BUTTON_LAYER_DOWN,
// Main menu
BUTTON_PAINTBRUSHES,
BUTTON_ADJUST,
BUTTON_DRAW,
BUTTON_CURVES,
BUTTON_LINES,
BUTTON_AIRBRUSH,
BUTTON_FLOODFILL,
BUTTON_POLYGONS,
BUTTON_POLYFILL,
BUTTON_RECTANGLES,
BUTTON_FILLRECT,
BUTTON_CIRCLES,
BUTTON_FILLCIRC,
BUTTON_GRADRECT,
BUTTON_SPHERES,
BUTTON_BRUSH,
BUTTON_POLYBRUSH,
BUTTON_BRUSH_EFFECTS,
BUTTON_EFFECTS,
BUTTON_TEXT,
BUTTON_MAGNIFIER,
BUTTON_COLORPICKER,
BUTTON_RESOL,
BUTTON_PAGE,
BUTTON_SAVE,
BUTTON_LOAD,
BUTTON_SETTINGS,
BUTTON_CLEAR,
BUTTON_HELP,
BUTTON_UNDO,
BUTTON_KILL,
BUTTON_QUIT,
BUTTON_PALETTE,
BUTTON_PAL_LEFT,
BUTTON_PAL_RIGHT,
BUTTON_CHOOSE_COL,
NB_BUTTONS ///< Number of buttons in the menu bar.
};
///
/// Identifiers of special actions that can have a keyboard shortcut.
/// They are special in the sense that there's no button in the menu for them,
/// so it requires a specific handling.
enum SPECIAL_ACTIONS
{
SPECIAL_MOUSE_UP=0,
SPECIAL_MOUSE_DOWN,
SPECIAL_MOUSE_LEFT,
SPECIAL_MOUSE_RIGHT,
SPECIAL_CLICK_LEFT,
SPECIAL_CLICK_RIGHT,
SPECIAL_NEXT_FORECOLOR,
SPECIAL_PREVIOUS_FORECOLOR,
SPECIAL_NEXT_BACKCOLOR,
SPECIAL_PREVIOUS_BACKCOLOR,
SPECIAL_SMALLER_PAINTBRUSH,
SPECIAL_BIGGER_PAINTBRUSH,
SPECIAL_NEXT_USER_FORECOLOR,
SPECIAL_PREVIOUS_USER_FORECOLOR,
SPECIAL_NEXT_USER_BACKCOLOR,
SPECIAL_PREVIOUS_USER_BACKCOLOR,
SPECIAL_SCROLL_UP,
SPECIAL_SCROLL_DOWN,
SPECIAL_SCROLL_LEFT,
SPECIAL_SCROLL_RIGHT,
SPECIAL_SCROLL_UP_FAST,
SPECIAL_SCROLL_DOWN_FAST,
SPECIAL_SCROLL_LEFT_FAST,
SPECIAL_SCROLL_RIGHT_FAST,
SPECIAL_SCROLL_UP_SLOW,
SPECIAL_SCROLL_DOWN_SLOW,
SPECIAL_SCROLL_LEFT_SLOW,
SPECIAL_SCROLL_RIGHT_SLOW,
SPECIAL_SHOW_HIDE_CURSOR,
SPECIAL_DOT_PAINTBRUSH,
SPECIAL_CONTINUOUS_DRAW,
SPECIAL_FLIP_X,
SPECIAL_FLIP_Y,
SPECIAL_ROTATE_90,
SPECIAL_ROTATE_180,
SPECIAL_STRETCH,
SPECIAL_DISTORT,
SPECIAL_OUTLINE,
SPECIAL_NIBBLE,
SPECIAL_GET_BRUSH_COLORS,
SPECIAL_RECOLORIZE_BRUSH,
SPECIAL_ROTATE_ANY_ANGLE,
SPECIAL_LOAD_BRUSH,
SPECIAL_SAVE_BRUSH,
SPECIAL_INVERT_SIEVE,
SPECIAL_ZOOM_IN,
SPECIAL_ZOOM_OUT,
SPECIAL_CENTER_ATTACHMENT,
SPECIAL_TOP_LEFT_ATTACHMENT,
SPECIAL_TOP_RIGHT_ATTACHMENT,
SPECIAL_BOTTOM_LEFT_ATTACHMENT,
SPECIAL_BOTTOM_RIGHT_ATTACHMENT,
SPECIAL_EXCLUDE_COLORS_MENU,
SPECIAL_SHADE_MODE,
SPECIAL_SHADE_MENU,
SPECIAL_QUICK_SHADE_MODE, ///< This must be the first of the "effects" family
SPECIAL_QUICK_SHADE_MENU,
SPECIAL_STENCIL_MODE,
SPECIAL_STENCIL_MENU,
SPECIAL_MASK_MODE,
SPECIAL_MASK_MENU,
SPECIAL_GRID_MODE,
SPECIAL_GRID_MENU,
SPECIAL_SIEVE_MODE,
SPECIAL_SIEVE_MENU,
SPECIAL_COLORIZE_MODE,
SPECIAL_COLORIZE_MENU,
SPECIAL_SMOOTH_MODE,
SPECIAL_SMOOTH_MENU,
SPECIAL_SMEAR_MODE,
SPECIAL_EFFECTS_OFF,
SPECIAL_TILING_MODE,
SPECIAL_TRANSPARENCY_1,
SPECIAL_TRANSPARENCY_2,
SPECIAL_TRANSPARENCY_3,
SPECIAL_TRANSPARENCY_4,
SPECIAL_TRANSPARENCY_5,
SPECIAL_TRANSPARENCY_6,
SPECIAL_TRANSPARENCY_7,
SPECIAL_TRANSPARENCY_8,
SPECIAL_TRANSPARENCY_9,
SPECIAL_TRANSPARENCY_0,
SPECIAL_TILING_MENU, ///< This must be the last of the "effects" family
SPECIAL_ZOOM_1,
SPECIAL_ZOOM_2,
SPECIAL_ZOOM_3,
SPECIAL_ZOOM_4,
SPECIAL_ZOOM_5,
SPECIAL_ZOOM_6,
SPECIAL_ZOOM_8,
SPECIAL_ZOOM_10,
SPECIAL_ZOOM_12,
SPECIAL_ZOOM_14,
SPECIAL_ZOOM_16,
SPECIAL_ZOOM_18,
SPECIAL_ZOOM_20,
SPECIAL_SHOW_GRID,
SPECIAL_LAYER1_SELECT,
SPECIAL_LAYER1_TOGGLE,
SPECIAL_LAYER2_SELECT,
SPECIAL_LAYER2_TOGGLE,
SPECIAL_LAYER3_SELECT,
SPECIAL_LAYER3_TOGGLE,
SPECIAL_LAYER4_SELECT,
SPECIAL_LAYER4_TOGGLE,
SPECIAL_LAYER5_SELECT,
SPECIAL_LAYER5_TOGGLE,
SPECIAL_LAYER6_SELECT,
SPECIAL_LAYER6_TOGGLE,
SPECIAL_LAYER7_SELECT,
SPECIAL_LAYER7_TOGGLE,
SPECIAL_LAYER8_SELECT,
SPECIAL_LAYER8_TOGGLE,
SPECIAL_LAYER_ADD,
SPECIAL_LAYER_DELETE,
SPECIAL_LAYER_MERGE,
SPECIAL_LAYER_SWAP_UP,
SPECIAL_LAYER_SWAP_DOWN,
SPECIAL_LAYER_MENU,
NB_SPECIAL_SHORTCUTS ///< Number of special shortcuts
};
/// Identifiers of the operations, ie tools you use on the image.
enum OPERATIONS
{
OPERATION_CONTINUOUS_DRAW=0, ///< Freehand continuous draw
OPERATION_DISCONTINUOUS_DRAW,///< Freehand discontinuous draw
OPERATION_POINT_DRAW, ///< Freehand point-by-point draw
OPERATION_FILLED_CONTOUR, ///< Filled contour
OPERATION_LINE, ///< Lines
OPERATION_K_LIGNE, ///< Linked lines
OPERATION_CENTERED_LINES, ///< Centered lines
OPERATION_EMPTY_RECTANGLE, ///< Empty rectangle
OPERATION_FILLED_RECTANGLE, ///< Filled rectangle
OPERATION_EMPTY_CIRCLE, ///< Empty circle
OPERATION_FILLED_CIRCLE, ///< Filled circle
OPERATION_EMPTY_ELLIPSE, ///< Empty ellipse
OPERATION_FILLED_ELLIPSE, ///< Filled ellipse
OPERATION_FILL, ///< Fill
OPERATION_REPLACE, ///< Color replacer
OPERATION_GRAB_BRUSH, ///< Rectangular brush grabbing
OPERATION_POLYBRUSH, ///< Polygonal brush grabbing
OPERATION_COLORPICK, ///< Colorpicker
OPERATION_MAGNIFY, ///< Position the magnify window
OPERATION_3_POINTS_CURVE, ///< Curve with 3 control points
OPERATION_4_POINTS_CURVE, ///< Curve with 4 control points
OPERATION_AIRBRUSH, ///< Airbrush
OPERATION_POLYGON, ///< Polygon
OPERATION_POLYFORM, ///< Polyform
OPERATION_POLYFILL, ///< Filled polygon
OPERATION_FILLED_POLYFORM, ///< Filled polyform
OPERATION_SCROLL, ///< Scroll (pan)
OPERATION_GRAD_CIRCLE, ///< Gradient-filled circle
OPERATION_GRAD_ELLIPSE, ///< Gradient-filled ellipse
OPERATION_ROTATE_BRUSH, ///< Rotate brush
OPERATION_STRETCH_BRUSH, ///< Stretch brush
OPERATION_DISTORT_BRUSH, ///< Distort brush
OPERATION_GRAD_RECTANGLE, ///< Gradient-filled rectangle
NB_OPERATIONS ///< Number of operations handled by the engine
};
#endif