1 /* vim:expandtab:ts=2 sw=2:
2 */
3 /*  Grafx2 - The Ultimate 256-color bitmap paint program
4 
5 	Copyright owned by various GrafX2 authors, see COPYRIGHT.txt for details.
6 
7     Grafx2 is free software; you can redistribute it and/or
8     modify it under the terms of the GNU General Public License
9     as published by the Free Software Foundation; version 2
10     of the License.
11 
12     Grafx2 is distributed in the hope that it will be useful,
13     but WITHOUT ANY WARRANTY; without even the implied warranty of
14     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15     GNU General Public License for more details.
16 
17     You should have received a copy of the GNU General Public License
18     along with Grafx2; if not, see <http://www.gnu.org/licenses/>
19 */
20 
21 //////////////////////////////////////////////////////////////////////////////
22 ///@file const.h
23 /// Constants (preprocessor defines) and enumerations used anywhere.
24 //////////////////////////////////////////////////////////////////////////////
25 
26 #ifndef _CONST_H_
27 #define _CONST_H_
28 
29 #ifndef M_2PI
30 #define M_2PI 6.28318530717958647692528676656 ///< Hmm, pie...
31 #endif
32 
33 #define VERSION1                  2     ///< Version number for gfx2.cfg (1/4)
34 #define VERSION2                  0     ///< Version number for gfx2.cfg (2/4)
35 #define BETA1                     98    ///< Version number for gfx2.cfg (3/4)
36 #define BETA2                     0     ///< Version number for gfx2.cfg (4/4)
37 #define MAX_VIDEO_MODES           200   ///< Maximum number of video modes Grafx2 can propose.
38 #define NB_ZOOM_FACTORS           15    ///< Number of zoom levels available in the magnifier.
39 #define MENU_WIDTH                254   ///< Width of the menu (not counting the palette)
40 #define MENU_HEIGHT               44    ///< Height of the menu.
41 #define NB_CURSOR_SPRITES         9     ///< Number of available mouse cursor sprites.
42 #define CURSOR_SPRITE_WIDTH       16    ///< Width of a mouse cursor sprite.
43 #define CURSOR_SPRITE_HEIGHT      16    ///< Height of a mouse cursor sprite.
44 #define MENU_SPRITE_WIDTH         16    ///< Width of a menu sprite in pixels
45 #define MENU_SPRITE_HEIGHT        16    ///< Height of a menu sprite in pixels
46 #define EFFECT_SPRITE_WIDTH       14    ///< Width of an effect sprite in pixels
47 #define EFFECT_SPRITE_HEIGHT      14    ///< Height of an effect sprite in pixels
48 #define LAYER_SPRITE_WIDTH        14    ///< Width of a layer button in pixels
49 #define LAYER_SPRITE_HEIGHT       10    ///< Height of a layer button in pixels
50 #define PAINTBRUSH_WIDTH          16    ///< Width of a preset paintbrush sprite
51 #define PAINTBRUSH_HEIGHT         16    ///< Height of a preset paintbrush sprite
52 #define MAX_PAINTBRUSH_SIZE       127   ///< Max size for a resizable paintbrush
53 #define ICON_SPRITE_WIDTH         8     ///< Width of an icon in pixels
54 #define ICON_SPRITE_HEIGHT        8     ///< Height of an icon in pixels
55 #define NB_PAINTBRUSH_SPRITES     48    ///< Number of preset paintbrushes
56 #define NB_PRESET_SIEVE           12    ///< Number of preset sieve patterns
57 #define OPERATION_STACK_SIZE      16    ///< Max number of parameters in the operation stack.
58 #define MAX_DISPLAYABLE_PATH      37    ///< Max number of characters to display directory name, in Save/Load screens.
59 #define COMMENT_SIZE              32    ///< Max number of characters for a comment in PKM or PNG file.
60 #define NB_MAX_PAGES_UNDO         99    ///< Max number of undo pages
61 #define DEFAULT_ZOOM_FACTOR        4    ///< Initial zoom factor for the magnifier.
62 #define MAX_PATH_CHARACTERS PATH_MAX    ///< Number of characters for a file+complete path. Adapt to your OS...
63 #define NB_BOOKMARKS               4    ///< Number of bookmark buttons in Save/Load screen.
64 // Character to show a right arrow, used when editing long strings. It's present in ::Gfx->System_font
65 #define RIGHT_TRIANGLE_CHARACTER  16
66 // Character to show a left arrow, used when editing long strings. It's present in ::Gfx->System_font
67 #define LEFT_TRIANGLE_CHARACTER   17
68 /// Character to display in menus for an ellipsis.
69 #define ELLIPSIS_CHARACTER       '\x85' // 3 dots : …  / HTML entity : &hellip;
70 #define NB_LAYERS                  1    ///< Initial number of layers for a new image
71 #define MAX_NB_FRAMES            999    ///< Maximum number of frames that can be used in a grafx2 animation.
72 #define MAX_NB_LAYERS             16    ///< Maximum number of layers that can be used in grafx2. Note that 32 is upper limit because of a few bit fields.
73 #define BRUSH_CONTAINER_PREVIEW_WIDTH    16  ///< Size for preview of a brush in Brush container
74 #define BRUSH_CONTAINER_PREVIEW_HEIGHT   16  ///< Size for preview of a brush in Brush container
75 #define BRUSH_CONTAINER_COLUMNS          4  ///< Number of columns in the Brush container
76 #define BRUSH_CONTAINER_ROWS             3  ///< Number of rows in the Brush container
77 
78 ///
79 /// We force the dynamic backup page allocation to leave a minimum of
80 /// 256Kb of free memory, to allow the rest of the program to work safely.
81 /// Note: This is a remainder of the DOS version. This system might not work
82 /// so well on other OSes, where the "available memory" changes due to external
83 /// factors.
84 #define MINIMAL_MEMORY_TO_RESERVE (256*1024)
85 
86 #define LEFT_SIDE                    1     ///< Indicates a left side or left-click
87 #define RIGHT_SIDE                   2     ///< Indicates a right side or right-click
88 
89 #define SEPARATOR_WIDTH              6     ///< Width of the separator between the normal and the zoomed view
90 #define INITIAL_SEPARATOR_PROPORTION 0.3f  ///< Proportion of the normal view width, relative to the whole screen width.
91 #define NB_ZOOMED_PIXELS_MIN         4     ///< Minimal number of pixel shown (in width) by the zoomed view. (Note: below 4, you can't scroll!)
92 
93 #if defined(__MORPHOS__) || defined(__amigaos4__) || defined(__amigaos__) || defined(__AROS__)
94    #define PARENT_DIR "/"
95 #else
96    /// Filename that means "parent directory" for your operating system.
97    #define PARENT_DIR ".."
98 #endif
99 
100 /// List of file formats recognized by grafx2
101 enum FILE_FORMATS
102 {
103   FORMAT_ALL_IMAGES=0, ///< This is not really a file format, it's reserverd for a compilation of all image file extensions
104   FORMAT_ALL_PALETTES=1, ///< This is not really a file format, it's reserverd for a compilation of all palette file extensions
105   FORMAT_ALL_FILES=2, ///< This is not really a file format, it's reserverd for the "*.*" filter option.
106   FORMAT_PNG,  ///< Portable Network Graphics
107   FORMAT_GIF,  ///< Graphics Interchange Format
108   FORMAT_BMP,  ///< Windows or OS/2 bitmap
109   FORMAT_PCX,  ///< Paintbrush
110   FORMAT_PKM,  ///< GrafX2 own format (Karl Maritaud)
111   FORMAT_LBM,  ///< IFF ILBM : InterLeaved BitMap
112   FORMAT_PBM,  ///< IFF PBM : Packet BitMap
113   FORMAT_ACBM, ///< IFF ACBM : Amiga Contiguous BitMap
114   FORMAT_IMG,  ///< from PV (c)W.Wiedmann
115   FORMAT_SCx,  ///< ColoRIX
116   FORMAT_PI1,  ///< Atari ST Degas
117   FORMAT_PC1,  ///< Atari ST Degas Elite
118   FORMAT_CA1,  ///< Atari ST CrackArt
119   FORMAT_CEL,  ///< Atari ST Cyber Paint Cell
120   FORMAT_NEO,  ///< Atari ST NeoChrome
121   FORMAT_TNY,  ///< Atari ST Tiny Stuff
122   FORMAT_C64,  ///< Several C64 formats : Koala, FLI, BML, etc.
123   FORMAT_PRG,  ///< C64 autoload picture
124   FORMAT_GPX,  ///< pixcen C64 format : .gpx
125   FORMAT_KCF,  ///< KiSS Color File
126   FORMAT_PAL,  ///< raw 6bit palette or Jasc Paint Shop Pro palette
127   FORMAT_GPL,  ///< Gimp palette
128   FORMAT_SCR,  ///< Amstrad CPC
129   FORMAT_CM5,  ///< Amstrad CPC Mode 5
130   FORMAT_PPH,  ///< Amstrad CPC Perfect Pix
131   FORMAT_GOS,  ///< Amstrad Plus Graphos
132   FORMAT_SGX,  ///< SymbOS graphic files
133   FORMAT_XPM,  ///< X PixMap
134   FORMAT_ICO,  ///< Windows icons
135   FORMAT_INFO, ///< Amiga OS icons
136   FORMAT_FLI,  ///< Autodesk Animator FLI/FLC
137   FORMAT_MOTO, ///< Thomson MO/TO computers pictures
138   FORMAT_HGR,  ///< Apple II HGR and DHGR
139   FORMAT_TIFF, ///< Tagged Image File Format
140   FORMAT_GRB,  ///< HP-48 Grob
141   FORMAT_MSX,  ///< MSX formats
142   FORMAT_MISC, ///< Must be last of enum: others formats recognized by SDL_image (or recoil)
143   FORMAT_CLIPBOARD  ///< To load/save from/to Clipboard
144 };
145 
146 /// Default format for 'save as'
147 #define DEFAULT_FILEFORMAT    FORMAT_GIF
148 
149 /// Error codes for ::Error()
150 enum ERROR_CODES
151 {
152   ERROR_WARNING=0,         ///< Red flash on screen, non-fatal error
153   ERROR_GUI_MISSING,       ///< The graphics file is missing
154   ERROR_GUI_CORRUPTED,     ///< The graphics file cannot be parsed for GUI elements
155   ERROR_INI_MISSING,       ///< File gfx2def.ini is missing
156   ERROR_CFG_MISSING,       ///< File gfx2.cfg is missing (non-fatal)
157   ERROR_CFG_CORRUPTED,     ///< File gfx2.cfg couldn't be parsed (non-fatal)
158   ERROR_CFG_OLD,           ///< Unknown version of gfx2.cfg : either VERY old or wrong file (non-fatal)
159   ERROR_MEMORY,            ///< Out of memory
160   ERROR_COMMAND_LINE,      ///< Error in command-line arguments (syntax, or couldn't find the file to open)
161   ERROR_FORBIDDEN_MODE,    ///< Graphics mode requested is not supported
162   ERROR_FORBIDDEN_SIZE,    ///< Image size requested is not supported
163   ERROR_SAVING_CFG,        ///< Error while writing gfx2.cfg
164   ERROR_MISSING_DIRECTORY, ///< Unable to return to the original "current directory" on program exit
165   ERROR_INI_CORRUPTED,     ///< File gfx2.ini couldn't be parsed
166   ERROR_SAVING_INI,        ///< Error while writing gfx2.ini
167   ERROR_INIT,              ///< Program initialization error
168   ERROR_SORRY_SORRY_SORRY  ///< (Page allocation error that shouldn't ever happen, now)
169 };
170 
171 /// Available pixel scalers
172 enum PIXEL_RATIO
173 {
174     PIXEL_SIMPLE=0, ///< Use real pixels
175     PIXEL_WIDE,     ///< Use wide pixels (2x1) like on Amstrad CPC mode 0
176     PIXEL_TALL,     ///< Use tall pixels (1x2) like on Amstrad CPC mode 2
177     PIXEL_DOUBLE,   ///< Use big pixels (2x2) if your LCD screen can't do lowres by itself
178     PIXEL_TRIPLE,   ///< Use really big pixels (3x3)
179     PIXEL_WIDE2,    ///< Use big wide pixels (4x2)
180     PIXEL_TALL2,    ///< Use big tall pixels (2x4)
181     PIXEL_TALL3,    ///< Use big tall pixels (3x4)
182     PIXEL_QUAD,     ///< Use really giant pixels (4x4). You need to have a screen resolution at least 1280x800 to use this one
183     PIXEL_MAX       ///< Number of elements in enum
184 };
185 
186 /// Different kinds of menu button behavior.
187 enum FAMILY_OF_BUTTONS
188 {
189   FAMILY_TOOL=1,       ///< Drawing tools (example : Freehand draw)
190   FAMILY_INTERRUPTION, ///< Temporary operation (example : choosing paintbrush) > Interrupts the current operation to do something, then come back.
191   FAMILY_INSTANT,      ///< Single-click action (example : choose a color in palette) > It will be over as soon as we exit the called function.
192   FAMILY_TOOLBAR,      ///< Hide/show the menu
193   FAMILY_EFFECTS       ///< Effects
194 };
195 
196 /// The different kinds of buttons in menus or windows.
197 enum BUTTON_SHAPES
198 {
199   BUTTON_SHAPE_NO_FRAME,             ///< Ex: the palette
200   BUTTON_SHAPE_RECTANGLE,            ///< Ex: Most buttons.
201   BUTTON_SHAPE_TRIANGLE_TOP_LEFT,    ///< Ex: Empty rectangles.
202   BUTTON_SHAPE_TRIANGLE_BOTTOM_RIGHT ///< Ex: Filled rectangles.
203 };
204 
205 /// The different "mouse cursor" shapes
206 enum CURSOR_SHAPES
207 {
208   // Sprite based cursors first (also used as index in cursor sprite array)
209   CURSOR_SHAPE_ARROW,
210   CURSOR_SHAPE_TARGET,           ///< This one uses the paintbrush
211   CURSOR_SHAPE_COLORPICKER,
212   CURSOR_SHAPE_HOURGLASS,
213   CURSOR_SHAPE_MULTIDIRECTIONAL,
214   CURSOR_SHAPE_HORIZONTAL,
215   CURSOR_SHAPE_THIN_TARGET,      ///< This one uses the paintbrush
216   CURSOR_SHAPE_THIN_COLORPICKER, ///< This one uses the paintbrush
217   CURSOR_SHAPE_BUCKET,
218 
219   // XOR/runtime-generated cursors last
220   CURSOR_SHAPE_XOR_TARGET,
221   CURSOR_SHAPE_XOR_RECTANGLE,
222   CURSOR_SHAPE_XOR_ROTATION,
223 };
224 
225 /// The different shapes that can be used as a paintbrush (paintbrush types go in the beginning)
226 enum PAINTBRUSH_SHAPES
227 {
228   PAINTBRUSH_SHAPE_ROUND,
229   PAINTBRUSH_SHAPE_SQUARE,
230   PAINTBRUSH_SHAPE_HORIZONTAL_BAR,
231   PAINTBRUSH_SHAPE_VERTICAL_BAR,
232   PAINTBRUSH_SHAPE_SLASH,
233   PAINTBRUSH_SHAPE_ANTISLASH,
234   PAINTBRUSH_SHAPE_RANDOM,     ///< Random pixels in a circle shape, like an airbrush.
235   PAINTBRUSH_SHAPE_CROSS,
236   PAINTBRUSH_SHAPE_PLUS,
237   PAINTBRUSH_SHAPE_DIAMOND,
238   PAINTBRUSH_SHAPE_SIEVE_ROUND,
239   PAINTBRUSH_SHAPE_SIEVE_SQUARE,
240   PAINTBRUSH_SHAPE_RESERVED1,   ///< Reserved for future use
241   PAINTBRUSH_SHAPE_RESERVED2,   ///< Reserved for future use
242   PAINTBRUSH_SHAPE_RESERVED3,   ///< Reserved for future use
243   PAINTBRUSH_SHAPE_RESERVED4,   ///< Reserved for future use
244   PAINTBRUSH_SHAPE_RESERVED5,   ///< Reserved for future use
245   PAINTBRUSH_SHAPE_RESERVED6,   ///< Reserved for future use
246   PAINTBRUSH_SHAPE_RESERVED7,   ///< Reserved for future use
247   PAINTBRUSH_SHAPE_RESERVED8,   ///< Reserved for future use
248   PAINTBRUSH_SHAPE_MISC,        ///< A raw monochrome bitmap, can't be resized. This must be the last of the preset paintbrush types.
249   PAINTBRUSH_SHAPE_POINT,       ///< Used to reduce the paintbrush to a single pixel, during operations like floodfill.
250   PAINTBRUSH_SHAPE_NONE,        ///< Used to display no cursor at all (colorpicker)
251   PAINTBRUSH_SHAPE_COLOR_BRUSH, ///< User's brush, in color mode
252   PAINTBRUSH_SHAPE_MONO_BRUSH,  ///< User's brush, in mono mode
253   PAINTBRUSH_SHAPE_MAX          ///< Upper limit.
254 };
255 
256 /// Normal resting state for a menu button.
257 #define BUTTON_RELEASED 0
258 /// State of a menu button that is being pressed.
259 #define BUTTON_PRESSED  1
260 /// State of a button temporarily highligted
261 #define BUTTON_HIGHLIGHTED 2
262 
263 /// The different modes of the Shade
264 enum SHADE_MODES
265 {
266   SHADE_MODE_NORMAL,
267   SHADE_MODE_LOOP,
268   SHADE_MODE_NOSAT
269 };
270 
271 /// Identifiers for the chunks (data blocks) of gfx2.cfg
272 enum CHUNKS_CFG
273 {
274   CHUNK_KEYS            = 0, ///< Shortcut keys definitions
275   CHUNK_VIDEO_MODES     = 1, ///< List of video modes
276   CHUNK_SHADE           = 2, ///< Shade settings
277   CHUNK_MASK            = 3, ///< Mask settings
278   CHUNK_STENCIL         = 4, ///< Stencil settings
279   CHUNK_GRADIENTS       = 5, ///< Gradients
280   CHUNK_SMOOTH          = 6, ///< Smooth effect settings
281   CHUNK_EXCLUDE_COLORS  = 7, ///< List of excluded colors
282   CHUNK_QUICK_SHADE     = 8, ///< QShade effect settings
283   CHUNK_GRID            = 9, ///< Grid settings
284   CHUNK_BRUSH           =10, ///< Paintbrushes
285   CHUNK_SCRIPTS         =11, ///< Callable scripts
286   CHUNK_MAX
287 };
288 
289 /// Identifiers for the 8x8 icons of ::Gfx->Icon_sprite (most are unused now)
290 enum ICON_TYPES
291 {
292   ICON_FLOPPY_3_5=0, ///< 3.5 Floppy disk
293   ICON_FLOPPY_5_25,  ///< 5.25 Floppy disk
294   ICON_HDD,          ///< Hard disk drive
295   ICON_CDROM,        ///< CD-ROM
296   ICON_NETWORK,      ///< "Network" drive
297   ICON_STAR,         ///< Star (favorite)
298   ICON_DROPDOWN,     ///< Dropdown arrow
299   NB_ICON_SPRITES,   ///< Number of 8x8 icons
300   ICON_NONE          ///< None of the above
301 };
302 
303 enum EFFECT_SPRITES
304 {
305   EFFECTS_SPRITE_SHADE,
306   EFFECTS_SPRITE_TRANSP,
307   EFFECTS_SPRITE_SMOOTH,
308   EFFECTS_SPRITE_TILING,
309   EFFECTS_SPRITE_STENCIL,
310   EFFECTS_SPRITE_SIEVE,
311   EFFECTS_SPRITE_GRID,
312   EFFECTS_SPRITE_MASK,
313   EFFECTS_SPRITE_SMEAR,
314   EFFECTS_SPRITE_8BIT,
315   NB_EFFECTS_SPRITES ///< Number of effect sprites.
316 };
317 
318 /// Identifiers for the buttons in the menu.
319 enum BUTTON_NUMBERS
320 {
321   // Status bar
322   BUTTON_HIDE = 0,
323 
324   // Anim bar
325   BUTTON_LAYER_MENU2,
326   BUTTON_ANIM_TIME,
327   BUTTON_ANIM_FIRST_FRAME,
328   BUTTON_ANIM_PREV_FRAME,
329   BUTTON_ANIM_NEXT_FRAME,
330   BUTTON_ANIM_LAST_FRAME,
331   BUTTON_ANIM_ADD_FRAME,
332   BUTTON_ANIM_REMOVE_FRAME,
333   BUTTON_ANIM_UP_FRAME,
334   BUTTON_ANIM_DOWN_FRAME,
335 
336   BUTTON_ANIM_PLAY, // unused at this time
337 
338   // Layer bar
339   BUTTON_LAYER_MENU,
340   BUTTON_LAYER_COLOR,
341   BUTTON_LAYER_MERGE,
342   BUTTON_LAYER_ADD,
343   BUTTON_LAYER_REMOVE,
344   BUTTON_LAYER_UP,
345   BUTTON_LAYER_DOWN,
346   BUTTON_LAYER_SELECT,
347 
348   // Main menu
349   BUTTON_PAINTBRUSHES,
350   BUTTON_ADJUST,
351   BUTTON_DRAW,
352   BUTTON_CURVES,
353   BUTTON_LINES,
354   BUTTON_AIRBRUSH,
355   BUTTON_FLOODFILL,
356   BUTTON_POLYGONS,
357   BUTTON_POLYFILL,
358   BUTTON_RECTANGLES,
359   BUTTON_FILLRECT,
360   BUTTON_CIRCLES,
361   BUTTON_FILLCIRC,
362   BUTTON_GRADRECT,
363   BUTTON_SPHERES,
364   BUTTON_BRUSH,
365   BUTTON_POLYBRUSH,
366   BUTTON_BRUSH_EFFECTS,
367   BUTTON_EFFECTS,
368   BUTTON_TEXT,
369   BUTTON_MAGNIFIER,
370   BUTTON_COLORPICKER,
371   BUTTON_RESOL,
372   BUTTON_PAGE,
373   BUTTON_SAVE,
374   BUTTON_LOAD,
375   BUTTON_SETTINGS,
376   BUTTON_CLEAR,
377   BUTTON_HELP,
378   BUTTON_UNDO,
379   BUTTON_KILL,
380   BUTTON_QUIT,
381   BUTTON_PALETTE,
382   BUTTON_PAL_LEFT,
383   BUTTON_PAL_RIGHT,
384   BUTTON_CHOOSE_COL,
385   NB_BUTTONS            ///< Number of buttons in the menu bar.
386 };
387 
388 enum MENU_SPRITE
389 {
390   MENU_SPRITE_COLOR_BRUSH=0,
391   MENU_SPRITE_MONO_BRUSH,
392   MENU_SPRITE_DISCONTINUOUS_DRAW,
393   MENU_SPRITE_POINT_DRAW,
394   MENU_SPRITE_CONTOUR_DRAW,
395   MENU_SPRITE_4_POINTS_CURVE,
396   MENU_SPRITE_K_LINE,
397   MENU_SPRITE_CENTERED_LINES,
398   MENU_SPRITE_ELLIPSES,
399   MENU_SPRITE_POLYFORM,
400   MENU_SPRITE_REPLACE,
401   MENU_SPRITE_GRAD_ELLIPSE,
402   MENU_SPRITE_VERTICAL_PALETTE_SCROLL,
403   NB_MENU_SPRITES ///< Number of menu sprites.
404 };
405 
406 ///
407 /// Identifiers of special actions that can have a keyboard shortcut.
408 /// They are special in the sense that there's no button in the menu for them,
409 /// so it requires a specific handling.
410 enum SPECIAL_ACTIONS
411 {
412   SPECIAL_MOUSE_UP=0,
413   SPECIAL_MOUSE_DOWN,
414   SPECIAL_MOUSE_LEFT,
415   SPECIAL_MOUSE_RIGHT,
416   SPECIAL_CLICK_LEFT,
417   SPECIAL_CLICK_RIGHT,
418   SPECIAL_NEXT_FORECOLOR,
419   SPECIAL_PREVIOUS_FORECOLOR,
420   SPECIAL_NEXT_BACKCOLOR,
421   SPECIAL_PREVIOUS_BACKCOLOR,
422   SPECIAL_SMALLER_PAINTBRUSH,
423   SPECIAL_BIGGER_PAINTBRUSH,
424   SPECIAL_NEXT_USER_FORECOLOR,
425   SPECIAL_PREVIOUS_USER_FORECOLOR,
426   SPECIAL_NEXT_USER_BACKCOLOR,
427   SPECIAL_PREVIOUS_USER_BACKCOLOR,
428   SPECIAL_SCROLL_UP,
429   SPECIAL_SCROLL_DOWN,
430   SPECIAL_SCROLL_LEFT,
431   SPECIAL_SCROLL_RIGHT,
432   SPECIAL_SCROLL_UP_FAST,
433   SPECIAL_SCROLL_DOWN_FAST,
434   SPECIAL_SCROLL_LEFT_FAST,
435   SPECIAL_SCROLL_RIGHT_FAST,
436   SPECIAL_SCROLL_UP_SLOW,
437   SPECIAL_SCROLL_DOWN_SLOW,
438   SPECIAL_SCROLL_LEFT_SLOW,
439   SPECIAL_SCROLL_RIGHT_SLOW,
440   SPECIAL_SHOW_HIDE_CURSOR,
441   SPECIAL_DOT_PAINTBRUSH,
442   SPECIAL_CONTINUOUS_DRAW,
443   SPECIAL_FLIP_X,
444   SPECIAL_FLIP_Y,
445   SPECIAL_ROTATE_90,
446   SPECIAL_ROTATE_180,
447   SPECIAL_STRETCH,
448   SPECIAL_DISTORT,
449   SPECIAL_OUTLINE,
450   SPECIAL_NIBBLE,
451   SPECIAL_GET_BRUSH_COLORS,
452   SPECIAL_RECOLORIZE_BRUSH,
453   SPECIAL_ROTATE_ANY_ANGLE,
454   SPECIAL_BRUSH_DOUBLE,
455   SPECIAL_BRUSH_DOUBLE_WIDTH,
456   SPECIAL_BRUSH_DOUBLE_HEIGHT,
457   SPECIAL_BRUSH_HALVE,
458   SPECIAL_LOAD_BRUSH,
459   SPECIAL_SAVE_BRUSH,
460   SPECIAL_INVERT_SIEVE,
461   SPECIAL_ZOOM_IN,
462   SPECIAL_ZOOM_OUT,
463   SPECIAL_CENTER_ATTACHMENT,
464   SPECIAL_TOP_LEFT_ATTACHMENT,
465   SPECIAL_TOP_RIGHT_ATTACHMENT,
466   SPECIAL_BOTTOM_LEFT_ATTACHMENT,
467   SPECIAL_BOTTOM_RIGHT_ATTACHMENT,
468   SPECIAL_EXCLUDE_COLORS_MENU,
469   SPECIAL_SHADE_MODE,
470   SPECIAL_SHADE_MENU,
471   SPECIAL_QUICK_SHADE_MODE,       ///< This must be the first of the "effects" family
472   SPECIAL_QUICK_SHADE_MENU,
473   SPECIAL_STENCIL_MODE,
474   SPECIAL_STENCIL_MENU,
475   SPECIAL_MASK_MODE,
476   SPECIAL_MASK_MENU,
477   SPECIAL_GRID_MODE,
478   SPECIAL_GRID_MENU,
479   SPECIAL_SIEVE_MODE,
480   SPECIAL_SIEVE_MENU,
481   SPECIAL_COLORIZE_MODE,
482   SPECIAL_COLORIZE_MENU,
483   SPECIAL_SMOOTH_MODE,
484   SPECIAL_SMOOTH_MENU,
485   SPECIAL_SMEAR_MODE,
486   SPECIAL_EFFECTS_OFF,
487   SPECIAL_TILING_MODE,
488   SPECIAL_TRANSPARENCY_1,
489   SPECIAL_TRANSPARENCY_2,
490   SPECIAL_TRANSPARENCY_3,
491   SPECIAL_TRANSPARENCY_4,
492   SPECIAL_TRANSPARENCY_5,
493   SPECIAL_TRANSPARENCY_6,
494   SPECIAL_TRANSPARENCY_7,
495   SPECIAL_TRANSPARENCY_8,
496   SPECIAL_TRANSPARENCY_9,
497   SPECIAL_TRANSPARENCY_0,
498   SPECIAL_TILEMAP_MODE,
499   SPECIAL_TILEMAP_MENU,
500   SPECIAL_TILING_MENU,            ///< This must be the last of the "effects" family
501   SPECIAL_ZOOM_1,
502   SPECIAL_ZOOM_2,
503   SPECIAL_ZOOM_3,
504   SPECIAL_ZOOM_4,
505   SPECIAL_ZOOM_5,
506   SPECIAL_ZOOM_6,
507   SPECIAL_ZOOM_8,
508   SPECIAL_ZOOM_10,
509   SPECIAL_ZOOM_12,
510   SPECIAL_ZOOM_14,
511   SPECIAL_ZOOM_16,
512   SPECIAL_ZOOM_18,
513   SPECIAL_ZOOM_20,
514   SPECIAL_SHOW_GRID,
515   SPECIAL_LAYER1_SELECT,
516   SPECIAL_LAYER1_TOGGLE,
517   SPECIAL_LAYER2_SELECT,
518   SPECIAL_LAYER2_TOGGLE,
519   SPECIAL_LAYER3_SELECT,
520   SPECIAL_LAYER3_TOGGLE,
521   SPECIAL_LAYER4_SELECT,
522   SPECIAL_LAYER4_TOGGLE,
523   SPECIAL_LAYER5_SELECT,
524   SPECIAL_LAYER5_TOGGLE,
525   SPECIAL_LAYER6_SELECT,
526   SPECIAL_LAYER6_TOGGLE,
527   SPECIAL_LAYER7_SELECT,
528   SPECIAL_LAYER7_TOGGLE,
529   SPECIAL_LAYER8_SELECT,
530   SPECIAL_LAYER8_TOGGLE,
531   SPECIAL_REPEAT_SCRIPT,
532   SPECIAL_RUN_SCRIPT_1,
533   SPECIAL_RUN_SCRIPT_2,
534   SPECIAL_RUN_SCRIPT_3,
535   SPECIAL_RUN_SCRIPT_4,
536   SPECIAL_RUN_SCRIPT_5,
537   SPECIAL_RUN_SCRIPT_6,
538   SPECIAL_RUN_SCRIPT_7,
539   SPECIAL_RUN_SCRIPT_8,
540   SPECIAL_RUN_SCRIPT_9,
541   SPECIAL_RUN_SCRIPT_10,
542   SPECIAL_CYCLE_MODE,
543 
544   SPECIAL_FORMAT_CHECKER,
545   SPECIAL_FORMAT_CHECKER_MENU,
546 
547   SPECIAL_HOLD_PAN,
548   SPECIAL_ZOOM_IN_MORE,
549   SPECIAL_ZOOM_OUT_MORE,
550 
551   NB_SPECIAL_SHORTCUTS            ///< Number of special shortcuts
552 };
553 
554 /// Identifiers of the operations, ie tools you use on the image.
555 enum OPERATIONS
556 {
557   OPERATION_CONTINUOUS_DRAW=0, ///< Freehand continuous draw
558   OPERATION_DISCONTINUOUS_DRAW,///< Freehand discontinuous draw
559   OPERATION_POINT_DRAW,        ///< Freehand point-by-point draw
560   OPERATION_FILLED_CONTOUR,    ///< Filled contour
561   OPERATION_LINE,              ///< Lines
562   OPERATION_K_LINE,            ///< Linked lines
563   OPERATION_CENTERED_LINES,    ///< Centered lines
564   OPERATION_EMPTY_RECTANGLE,   ///< Empty rectangle
565   OPERATION_FILLED_RECTANGLE,  ///< Filled rectangle
566   OPERATION_EMPTY_CIRCLE_CTR,  ///< Empty circle (center radius)
567   OPERATION_EMPTY_CIRCLE_CRN,  ///< Empty circle (corners)
568   OPERATION_EMPTY_ELLIPSE_CTR, ///< Empty ellipse (center radius)
569   OPERATION_EMPTY_ELLIPSE_CRN, ///< Empty ellipse (corners)
570   OPERATION_FILLED_CIRCLE_CTR, ///< Filled circle (center radius)
571   OPERATION_FILLED_CIRCLE_CRN, ///< Filled circle (corners)
572   OPERATION_FILLED_ELLIPSE_CTR,///< Filled ellipse (center radius)
573   OPERATION_FILLED_ELLIPSE_CRN,///< Filled ellipse (corners)
574   OPERATION_FILL,              ///< Fill
575   OPERATION_REPLACE,           ///< Color replacer
576   OPERATION_GRAB_BRUSH,        ///< Rectangular brush grabbing
577   OPERATION_POLYBRUSH,         ///< Polygonal brush grabbing
578   OPERATION_COLORPICK,         ///< Colorpicker
579   OPERATION_MAGNIFY,           ///< Position the magnify window
580   OPERATION_3_POINTS_CURVE,    ///< Curve with 3 control points
581   OPERATION_4_POINTS_CURVE,    ///< Curve with 4 control points
582   OPERATION_AIRBRUSH,          ///< Airbrush
583   OPERATION_POLYGON,           ///< Polygon
584   OPERATION_POLYFORM,          ///< Polyform
585   OPERATION_POLYFILL,          ///< Filled polygon
586   OPERATION_FILLED_POLYFORM,   ///< Filled polyform
587   OPERATION_SCROLL,            ///< Scroll (pan)
588   OPERATION_GRAD_CIRCLE_CTR,   ///< Gradient-filled circle (center radius)
589   OPERATION_GRAD_CIRCLE_CRN,   ///< Gradient-filled circle (corners)
590   OPERATION_GRAD_ELLIPSE_CTR,  ///< Gradient-filled ellipse (center radius)
591   OPERATION_GRAD_ELLIPSE_CRN,  ///< Gradient-filled ellipse (corners)
592   OPERATION_ROTATE_BRUSH,      ///< Rotate brush
593   OPERATION_STRETCH_BRUSH,     ///< Stretch brush
594   OPERATION_DISTORT_BRUSH,     ///< Distort brush
595   OPERATION_GRAD_RECTANGLE,    ///< Gradient-filled rectangle
596   OPERATION_RMB_COLORPICK,     ///< Colorpick on right mouse button
597   OPERATION_PAN_VIEW,          ///< Pan view
598   NB_OPERATIONS                ///< Number of operations handled by the engine
599 };
600 
601 /// Image drawing modes.
602 enum IMAGE_MODES
603 {
604   IMAGE_MODE_LAYERED=0, ///< Layered image
605   IMAGE_MODE_ANIMATION, ///< Animation
606   IMAGE_MODE_ZX,        ///< ZX Spectrum (note "SPECTRUM" is kept for later... Spectrum 512 anyone?)
607   IMAGE_MODE_GBC,       ///< Game Boy Color
608   IMAGE_MODE_THOMSON,   ///< "40 columns" mode on Thomson machines
609   IMAGE_MODE_EGX,       ///< CPC EGX
610   IMAGE_MODE_EGX2,      ///< CPC EGX2
611   IMAGE_MODE_MODE5,     ///< CPC mode 5
612   IMAGE_MODE_RASTER,    ///< CPC generic rasters
613   IMAGE_MODE_C64HIRES,  ///< C64 HiRes
614   IMAGE_MODE_C64MULTI,  ///< C64 Multicolor
615   IMAGE_MODE_C64FLI,    ///< C64 Flexible Line Interpretation
616   IMAGE_MODE_HGR,       ///< Apple 2 HGR
617   IMAGE_MODE_DHGR,      ///< Apple 2 DHGR
618   IMAGE_MODE_MEGADRIVE, ///< Sega Mega Drive / Genesis
619   IMAGE_MODE_TMS9918G2, ///< TMS9918 Mode 2 (MSX, ColecoVision, SC-3000, etc.)
620 };
621 
622 /// Circle / Ellipse Modes
623 #define MASK_CIRCLE_ELLIPSE (2)
624 #define MASK_CENTER_CORNERS (1)
625 #define MODE_CIRCLE    (0)
626 #define MODE_ELLIPSE   (2)
627 #define MODE_CENTER    (0)
628 #define MODE_CORNERS   (1)
629 #define MODE_CIRCLE_CTR  (MODE_CIRCLE|MODE_CENTER)
630 #define MODE_CIRCLE_CRN  (MODE_CIRCLE|MODE_CORNERS)
631 #define MODE_ELLIPSE_CTR (MODE_ELLIPSE|MODE_CENTER)
632 #define MODE_ELLIPSE_CRN (MODE_ELLIPSE|MODE_CORNERS)
633 
634 enum FSOBJECT_TYPE
635 {
636   FSOBJECT_FILE = 0,
637   FSOBJECT_DIR = 1,
638   FSOBJECT_DRIVE = 2
639 };
640 
641 enum GFX2_WINDOW_STATES
642 {
643   GFX2_WINDOW_STANDARD = 0,
644   GFX2_WINDOW_MAXIMIZED,
645   GFX2_WINDOW_MINIMIZED
646 };
647 
648 #endif
649