blob: 219d623e85911df86a85c9573ecdb575e4dd9da4 [file] [log] [blame]
DRC2ff39b82011-07-28 08:38:59 +00001//
2// "$Id: Enumerations.H 8710 2011-05-21 21:55:59Z manolo $"
3//
4// Enumerations for the Fast Light Tool Kit (FLTK).
5//
6// Copyright 1998-2011 by Bill Spitzak and others.
7//
8// This library is free software; you can redistribute it and/or
9// modify it under the terms of the GNU Library General Public
10// License as published by the Free Software Foundation; either
11// version 2 of the License, or (at your option) any later version.
12//
13// This library is distributed in the hope that it will be useful,
14// but WITHOUT ANY WARRANTY; without even the implied warranty of
15// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16// Library General Public License for more details.
17//
18// You should have received a copy of the GNU Library General Public
19// License along with this library; if not, write to the Free Software
20// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
21// USA.
22//
23// Please report all bugs and problems on the following page:
24//
25// http://www.fltk.org/str.php
26//
27
28/** \file
29 This file contains type definitions and general enumerations.
30 */
31
32#ifndef Fl_Enumerations_H
33#define Fl_Enumerations_H
34
35# include "Fl_Export.H"
36# include "fl_types.h"
37
38/** \name Version Numbers
39
40 FLTK defines some constants to help the programmer to
41 find out, for which FLTK version a program is compiled.
42
43 The following constants are defined:
44 */
45/*@{*/
46
47/**
48 The major release version of this FLTK library.
49 \sa FL_VERSION
50 */
51#define FL_MAJOR_VERSION 1
52
53/**
54 The minor release version for this library.
55
56 FLTK remains mostly source-code compatible between minor version changes.
57 */
58#define FL_MINOR_VERSION 3
59
60/**
61 The patch version for this library.
62
63 FLTK remains binary compatible between patches.
64 */
65#define FL_PATCH_VERSION 0
66
67/**
68 The FLTK version number as a \em double.
69
70 FL_VERSION is a double that describes the major and minor version numbers.
71 Version 1.1 is actually stored as 1.01 to allow for more than 9 minor
72 releases.
73
74 The FL_MAJOR_VERSION, FL_MINOR_VERSION, and FL_PATCH_VERSION constants
75 give the integral values for the major, minor, and patch releases
76 respectively.
77 */
78#define FL_VERSION ((double)FL_MAJOR_VERSION + \
79 (double)FL_MINOR_VERSION * 0.01 + \
80 (double)FL_PATCH_VERSION * 0.0001)
81
82/*@}*/ // group: Version Numbers
83
84/**
85 Every time a user moves the mouse pointer, clicks a button,
86 or presses a key, an event is generated and sent to your
87 application. Events can also come from other programs like the
88 window manager.
89
90 Events are identified by the integer argument passed to the
91 Fl_Widget::handle() virtual method. Other information about the
92 most recent event is stored in static locations and acquired by
93 calling the Fl::event_*() methods. This static information remains
94 valid until the next event is read from the window system, so it
95 is ok to look at it outside of the handle() method.
96
97 \sa Fl::event_text(), Fl::event_key(), class Fl::
98 */
99enum Fl_Event { // events
100 /** No event. */
101 FL_NO_EVENT = 0,
102
103 /** A mouse button has gone down with the mouse pointing at this
104 widget. You can find out what button by calling Fl::event_button().
105 You find out the mouse position by calling Fl::event_x() and
106 Fl::event_y().
107
108 A widget indicates that it "wants" the mouse click by returning non-zero
109 from its Fl_Widget::handle() method. It will then become the
110 Fl::pushed() widget and will get FL_DRAG and the matching FL_RELEASE events.
111 If Fl_Widget::handle() returns zero then FLTK will try sending the FL_PUSH
112 to another widget.
113 */
114 FL_PUSH = 1,
115
116 /** A mouse button has been released. You can find out what button by
117 calling Fl::event_button().
118
119 In order to receive the FL_RELEASE event, the widget must return
120 non-zero when handling FL_PUSH.
121 */
122 FL_RELEASE = 2,
123
124 /** The mouse has been moved to point at this widget. This can
125 be used for highlighting feedback. If a widget wants to
126 highlight or otherwise track the mouse, it indicates this by
127 returning non-zero from its handle() method. It then
128 becomes the Fl::belowmouse() widget and will receive
129 FL_MOVE and FL_LEAVE events.
130 */
131 FL_ENTER = 3,
132
133 /** The mouse has moved out of the widget.
134 In order to receive the FL_LEAVE event, the widget must
135 return non-zero when handling FL_ENTER.
136 */
137 FL_LEAVE = 4,
138
139 /** The mouse has moved with a button held down. The current button state
140 is in Fl::event_state(). The mouse position is in Fl::event_x() and
141 Fl::event_y().
142
143 In order to receive FL_DRAG events, the widget must return non-zero
144 when handling FL_PUSH.
145 */
146 FL_DRAG = 5,
147
148 /** This indicates an <I>attempt</I> to give a widget the keyboard focus.
149
150 If a widget wants the focus, it should change itself to display the
151 fact that it has the focus, and return non-zero from its handle() method.
152 It then becomes the Fl::focus() widget and gets FL_KEYDOWN, FL_KEYUP,
153 and FL_UNFOCUS events.
154
155 The focus will change either because the window manager changed which
156 window gets the focus, or because the user tried to navigate using tab,
157 arrows, or other keys. You can check Fl::event_key() to figure out why
158 it moved. For navigation it will be the key pressed and for interaction
159 with the window manager it will be zero.
160 */
161 FL_FOCUS = 6,
162
163 /** This event is sent to the previous Fl::focus() widget when another
164 widget gets the focus or the window loses focus.
165 */
166 FL_UNFOCUS = 7,
167
168 /** A key was pressed (FL_KEYDOWN) or released (FL_KEYUP).
169 Fl_KEYBOARD is a synonym for FL_KEYDOWN.
170 The key can be found in Fl::event_key().
171 The text that the key should insert can be found with Fl::event_text()
172 and its length is in Fl::event_length(). If you use the key handle()
173 should return 1. If you return zero then FLTK assumes you ignored the
174 key and will then attempt to send it to a parent widget. If none of
175 them want it, it will change the event into a FL_SHORTCUT event.
176
177 To receive FL_KEYBOARD events you must also respond to the FL_FOCUS
178 and FL_UNFOCUS events.
179
180 If you are writing a text-editing widget you may also want to call
181 the Fl::compose() function to translate individual keystrokes into
182 non-ASCII characters.
183
184 FL_KEYUP events are sent to the widget that currently has focus. This
185 is not necessarily the same widget that received the corresponding
186 FL_KEYDOWN event because focus may have changed between events.
187 */
188 FL_KEYDOWN = 8,
189
190 /** Equivalent to FL_KEYDOWN.
191 \see FL_KEYDOWN
192 */
193 FL_KEYBOARD = 8,
194
195 /** Key release event.
196 \see FL_KEYDOWN
197 */
198 FL_KEYUP = 9,
199
200 /** The user clicked the close button of a window.
201 This event is used internally only to trigger the callback of
202 Fl_Window derived classed. The default callback closes the
203 window calling Fl_Window::hide().
204 */
205 FL_CLOSE = 10,
206
207 /** The mouse has moved without any mouse buttons held down.
208 This event is sent to the Fl::belowmouse() widget.
209
210 In order to receive FL_MOVE events, the widget must return
211 non-zero when handling FL_ENTER.
212 */
213 FL_MOVE = 11,
214
215 /** If the Fl::focus() widget is zero or ignores an FL_KEYBOARD
216 event then FLTK tries sending this event to every widget it
217 can, until one of them returns non-zero. FL_SHORTCUT is first
218 sent to the Fl::belowmouse() widget, then its parents and siblings,
219 and eventually to every widget in the window, trying to find an
220 object that returns non-zero. FLTK tries really hard to not to ignore
221 any keystrokes!
222
223 You can also make "global" shortcuts by using Fl::add_handler(). A
224 global shortcut will work no matter what windows are displayed or
225 which one has the focus.
226 */
227 FL_SHORTCUT = 12,
228
229 /** This widget is no longer active, due to Fl_Widget::deactivate()
230 being called on it or one of its parents. Fl_Widget::active() may
231 still be true after this, the widget is only active if Fl_Widget::active()
232 is true on it and all its parents (use Fl_Widget::active_r() to check this).
233 */
234 FL_DEACTIVATE = 13,
235
236 /** This widget is now active, due to Fl_Widget::activate() being
237 called on it or one of its parents.
238 */
239 FL_ACTIVATE = 14,
240
241 /** This widget is no longer visible, due to Fl_Widget::hide() being
242 called on it or one of its parents, or due to a parent window being
243 minimized. Fl_Widget::visible() may still be true after this, but the
244 widget is visible only if visible() is true for it and all its
245 parents (use Fl_Widget::visible_r() to check this).
246 */
247 FL_HIDE = 15,
248
249 /** This widget is visible again, due to Fl_Widget::show() being called on
250 it or one of its parents, or due to a parent window being restored.
251 Child Fl_Windows respond to this by actually creating the window if not
252 done already, so if you subclass a window, be sure to pass FL_SHOW
253 to the base class Fl_Widget::handle() method!
254 */
255 FL_SHOW = 16,
256
257 /** You should get this event some time after you call Fl::paste().
258 The contents of Fl::event_text() is the text to insert and the number
259 of characters is in Fl::event_length().
260 */
261 FL_PASTE = 17,
262
263 /** The Fl::selection_owner() will get this event before the selection is
264 moved to another widget. This indicates that some other widget or program
265 has claimed the selection. Motif programs used this to clear the selection
266 indication. Most modern programs ignore this.
267 */
268 FL_SELECTIONCLEAR = 18,
269
270 /** The user has moved the mouse wheel. The Fl::event_dx() and Fl::event_dy()
271 methods can be used to find the amount to scroll horizontally and vertically.
272 */
273 FL_MOUSEWHEEL = 19,
274
275 /** The mouse has been moved to point at this widget. A widget that is
276 interested in receiving drag'n'drop data must return 1 to receive
277 FL_DND_DRAG, FL_DND_LEAVE and FL_DND_RELEASE events.
278 */
279 FL_DND_ENTER = 20,
280
281 /** The mouse has been moved inside a widget while dragging data. A
282 widget that is interested in receiving drag'n'drop data should
283 indicate the possible drop position.
284 */
285 FL_DND_DRAG = 21,
286
287 /** The mouse has moved out of the widget.
288 */
289 FL_DND_LEAVE = 22,
290
291 /** The user has released the mouse button dropping data into the widget.
292 If the widget returns 1, it will receive the data in the immediately
293 following FL_PASTE event.
294 */
DRC685f17e2011-07-28 09:23:00 +0000295 FL_DND_RELEASE = 23,
296
297 /** The fullscreen state of the window has changed
298 */
299 FL_FULLSCREEN = 24
300
DRC2ff39b82011-07-28 08:38:59 +0000301};
302
303/** \name When Conditions */
304/*@{*/
305/** These constants determine when a callback is performed.
306
307 \sa Fl_Widget::when();
308 \todo doxygen comments for values are incomplete and maybe wrong or unclear
309 */
310enum Fl_When { // Fl_Widget::when():
311 FL_WHEN_NEVER = 0, ///< Never call the callback
312 FL_WHEN_CHANGED = 1, ///< Do the callback only when the widget value changes
313 FL_WHEN_NOT_CHANGED = 2, ///< Do the callback whenever the user interacts with the widget
314 FL_WHEN_RELEASE = 4, ///< Do the callback when the button or key is released and the value changes
315 FL_WHEN_RELEASE_ALWAYS= 6, ///< Do the callback when the button or key is released, even if the value doesn't change
316 FL_WHEN_ENTER_KEY = 8, ///< Do the callback when the user presses the ENTER key and the value changes
317 FL_WHEN_ENTER_KEY_ALWAYS=10, ///< Do the callback when the user presses the ENTER key, even if the value doesn't change
318 FL_WHEN_ENTER_KEY_CHANGED=11 ///< ?
319};
320
321/*@}*/ // group: When Conditions
322
323/** \name Mouse and Keyboard Events
324
325 This and the following constants define the non-ASCII keys on the
326 keyboard for FL_KEYBOARD and FL_SHORTCUT events.
327
328 \todo FL_Button and FL_key... constants could be structured better
329 (use an enum or some doxygen grouping ?)
330
331 \sa Fl::event_key() and Fl::get_key(int) (use ascii letters for all other keys):
332 */
333
334/*@{*/
335
336// FIXME: These codes collide with valid Unicode keys
337
338#define FL_Button 0xfee8 ///< A mouse button; use Fl_Button + n for mouse button n.
339#define FL_BackSpace 0xff08 ///< The backspace key.
340#define FL_Tab 0xff09 ///< The tab key.
341#define FL_Enter 0xff0d ///< The enter key.
342#define FL_Pause 0xff13 ///< The pause key.
343#define FL_Scroll_Lock 0xff14 ///< The scroll lock key.
344#define FL_Escape 0xff1b ///< The escape key.
345#define FL_Home 0xff50 ///< The home key.
346#define FL_Left 0xff51 ///< The left arrow key.
347#define FL_Up 0xff52 ///< The up arrow key.
348#define FL_Right 0xff53 ///< The right arrow key.
349#define FL_Down 0xff54 ///< The down arrow key.
350#define FL_Page_Up 0xff55 ///< The page-up key.
351#define FL_Page_Down 0xff56 ///< The page-down key.
352#define FL_End 0xff57 ///< The end key.
353#define FL_Print 0xff61 ///< The print (or print-screen) key.
354#define FL_Insert 0xff63 ///< The insert key.
355#define FL_Menu 0xff67 ///< The menu key.
356#define FL_Help 0xff68 ///< The 'help' key on Mac keyboards
357#define FL_Num_Lock 0xff7f ///< The num lock key.
358#define FL_KP 0xff80 ///< One of the keypad numbers; use FL_KP + n for number n.
359#define FL_KP_Enter 0xff8d ///< The enter key on the keypad, same as Fl_KP+'\\r'.
360#define FL_KP_Last 0xffbd ///< The last keypad key; use to range-check keypad.
361#define FL_F 0xffbd ///< One of the function keys; use FL_F + n for function key n.
362#define FL_F_Last 0xffe0 ///< The last function key; use to range-check function keys.
363#define FL_Shift_L 0xffe1 ///< The lefthand shift key.
364#define FL_Shift_R 0xffe2 ///< The righthand shift key.
365#define FL_Control_L 0xffe3 ///< The lefthand control key.
366#define FL_Control_R 0xffe4 ///< The righthand control key.
367#define FL_Caps_Lock 0xffe5 ///< The caps lock key.
368#define FL_Meta_L 0xffe7 ///< The left meta/Windows key.
369#define FL_Meta_R 0xffe8 ///< The right meta/Windows key.
370#define FL_Alt_L 0xffe9 ///< The left alt key.
371#define FL_Alt_R 0xffea ///< The right alt key.
372#define FL_Delete 0xffff ///< The delete key.
373
374// These use the Private Use Area (PUA) of the Basic Multilingual Plane
375// of Unicode. Guaranteed not to conflict with a proper Unicode character.
376
377// These primarily map to the XFree86 keysym range
378#define FL_Volume_Down 0xEF11 /* Volume control down */
379#define FL_Volume_Mute 0xEF12 /* Mute sound from the system */
380#define FL_Volume_Up 0xEF13 /* Volume control up */
381#define FL_Media_Play 0xEF14 /* Start playing of audio */
382#define FL_Media_Stop 0xEF15 /* Stop playing audio */
383#define FL_Media_Prev 0xEF16 /* Previous track */
384#define FL_Media_Next 0xEF17 /* Next track */
385#define FL_Home_Page 0xEF18 /* Display user's home page */
386#define FL_Mail 0xEF19 /* Invoke user's mail program */
387#define FL_Search 0xEF1B /* Search */
388#define FL_Back 0xEF26 /* Like back on a browser */
389#define FL_Forward 0xEF27 /* Like forward on a browser */
390#define FL_Stop 0xEF28 /* Stop current operation */
391#define FL_Refresh 0xEF29 /* Refresh the page */
392#define FL_Sleep 0xEF2F /* Put system to sleep */
393#define FL_Favorites 0xEF30 /* Show favorite locations */
394
395/*@}*/ // group: Mouse and Keyboard Events
396
397/** \name Mouse Buttons
398
399 These constants define the button numbers for FL_PUSH and FL_RELEASE events.
400
401 \sa Fl::event_button()
402*/
403
404/*@{*/
405
406#define FL_LEFT_MOUSE 1 ///< The left mouse button
407#define FL_MIDDLE_MOUSE 2 ///< The middle mouse button
408#define FL_RIGHT_MOUSE 3 ///< The right mouse button
409
410/*@}*/ // group: Mouse Buttons
411
412
413/** \name Event States
414
415 The following constants define bits in the Fl::event_state() value.
416*/
417
418/*@{*/ // group: Event States
419
420// FIXME: it would be nice to have the modifiers in the upper 8 bit so that
421// a unicode ke (24bit) can be sent as an unsigned with the modifiers.
422
423#define FL_SHIFT 0x00010000 ///< One of the shift keys is down
424#define FL_CAPS_LOCK 0x00020000 ///< The caps lock is on
425#define FL_CTRL 0x00040000 ///< One of the ctrl keys is down
426#define FL_ALT 0x00080000 ///< One of the alt keys is down
427#define FL_NUM_LOCK 0x00100000 ///< The num lock is on
428 // most X servers do this?
429#define FL_META 0x00400000 ///< One of the meta/Windows keys is down
430 // correct for XFree86
431#define FL_SCROLL_LOCK 0x00800000 ///< The scroll lock is on
432 // correct for XFree86
433#define FL_BUTTON1 0x01000000 ///< Mouse button 1 is pushed
434#define FL_BUTTON2 0x02000000 ///< Mouse button 2 is pushed
435#define FL_BUTTON3 0x04000000 ///< Mouse button 3 is pushed
436#define FL_BUTTONS 0x7f000000 ///< Any mouse button is pushed
437#define FL_BUTTON(n) (0x00800000<<(n)) ///< Mouse button n (n > 0) is pushed
438
439#define FL_KEY_MASK 0x0000ffff ///< All keys are 16 bit for now
440 // FIXME: Unicode needs 24 bits!
441
442#ifdef __APPLE__
443# define FL_COMMAND FL_META ///< An alias for FL_CTRL on WIN32 and X11, or FL_META on MacOS X
444# define FL_CONTROL FL_CTRL ///< An alias for FL_META on WIN32 and X11, or FL_CTRL on MacOS X
445#else
446# define FL_COMMAND FL_CTRL ///< An alias for FL_CTRL on WIN32 and X11, or FL_META on MacOS X
447# define FL_CONTROL FL_META ///< An alias for FL_META on WIN32 and X11, or FL_CTRL on MacOS X
448#endif // __APPLE__
449
450/*@}*/ // group: Event States
451
452/** \name Box Types
453 \brief FLTK standard box types
454
455 This enum defines the standard box types included with FLTK.
456
457 FL_NO_BOX means nothing is drawn at all, so whatever is already
458 on the screen remains. The FL_..._FRAME types only draw their edges,
459 leaving the interior unchanged. The blue color in Figure 1
460 is the area that is not drawn by the frame types.
461
462 \image html boxtypes.png "Figure 1: FLTK standard box types"
463 \image latex boxtypes.png "FLTK standard box types" width=10cm
464 \todo Description of boxtypes is incomplete.
465 See below for the defined enum Fl_Boxtype.
466 \see src/Fl_get_system_colors.cxx
467*/
468/*@{*/
469enum Fl_Boxtype { // boxtypes (if you change these you must fix fl_boxtype.C):
470
471 FL_NO_BOX = 0, ///< nothing is drawn at all, this box is invisible
472 FL_FLAT_BOX, ///< a flat box
473 FL_UP_BOX, ///< see figure 1
474 FL_DOWN_BOX, ///< see figure 1
475 FL_UP_FRAME, ///< see figure 1
476 FL_DOWN_FRAME, ///< see figure 1
477 FL_THIN_UP_BOX, ///< see figure 1
478 FL_THIN_DOWN_BOX, ///< see figure 1
479 FL_THIN_UP_FRAME, ///< see figure 1
480 FL_THIN_DOWN_FRAME, ///< see figure 1
481 FL_ENGRAVED_BOX, ///< see figure 1
482 FL_EMBOSSED_BOX, ///< see figure 1
483 FL_ENGRAVED_FRAME, ///< see figure 1
484 FL_EMBOSSED_FRAME, ///< see figure 1
485 FL_BORDER_BOX, ///< see figure 1
486 _FL_SHADOW_BOX, ///< see figure 1
487 FL_BORDER_FRAME, ///< see figure 1
488 _FL_SHADOW_FRAME, ///< see figure 1
489 _FL_ROUNDED_BOX, ///< see figure 1
490 _FL_RSHADOW_BOX, ///< see figure 1
491 _FL_ROUNDED_FRAME, ///< see figure 1
492 _FL_RFLAT_BOX, ///< see figure 1
493 _FL_ROUND_UP_BOX, ///< see figure 1
494 _FL_ROUND_DOWN_BOX, ///< see figure 1
495 _FL_DIAMOND_UP_BOX, ///< see figure 1
496 _FL_DIAMOND_DOWN_BOX, ///< see figure 1
497 _FL_OVAL_BOX, ///< see figure 1
498 _FL_OSHADOW_BOX, ///< see figure 1
499 _FL_OVAL_FRAME, ///< see figure 1
500 _FL_OFLAT_BOX, ///< see figure 1
501 _FL_PLASTIC_UP_BOX, ///< plastic version of FL_UP_BOX
502 _FL_PLASTIC_DOWN_BOX, ///< plastic version of FL_DOWN_BOX
503 _FL_PLASTIC_UP_FRAME, ///< plastic version of FL_UP_FRAME
504 _FL_PLASTIC_DOWN_FRAME, ///< plastic version of FL_DOWN_FRAME
505 _FL_PLASTIC_THIN_UP_BOX, ///< plastic version of FL_THIN_UP_BOX
506 _FL_PLASTIC_THIN_DOWN_BOX, ///< plastic version of FL_THIN_DOWN_BOX
507 _FL_PLASTIC_ROUND_UP_BOX, ///< plastic version of FL_ROUND_UP_BOX
508 _FL_PLASTIC_ROUND_DOWN_BOX, ///< plastic version of FL_ROUND_DOWN_BOX
509 _FL_GTK_UP_BOX, ///< gtk+ version of FL_UP_BOX
510 _FL_GTK_DOWN_BOX, ///< gtk+ version of FL_DOWN_BOX
511 _FL_GTK_UP_FRAME, ///< gtk+ version of FL_UP_FRAME
512 _FL_GTK_DOWN_FRAME, ///< gtk+ version of FL_DOWN_RAME
513 _FL_GTK_THIN_UP_BOX, ///< gtk+ version of FL_THIN_UP_BOX
514 _FL_GTK_THIN_DOWN_BOX, ///< gtk+ version of FL_THIN_DOWN_BOX
515 _FL_GTK_THIN_UP_FRAME, ///< gtk+ version of FL_UP_FRAME
516 _FL_GTK_THIN_DOWN_FRAME, ///< gtk+ version of FL_THIN_DOWN_FRAME
517 _FL_GTK_ROUND_UP_BOX, ///< gtk+ version of FL_ROUND_UP_BOX
518 _FL_GTK_ROUND_DOWN_BOX, ///< gtk+ version of FL_ROUND_DOWN_BOX
519 FL_FREE_BOXTYPE ///< the first free box type for creation of new box types
520};
521extern FL_EXPORT Fl_Boxtype fl_define_FL_ROUND_UP_BOX();
522#define FL_ROUND_UP_BOX fl_define_FL_ROUND_UP_BOX()
523#define FL_ROUND_DOWN_BOX (Fl_Boxtype)(fl_define_FL_ROUND_UP_BOX()+1)
524extern FL_EXPORT Fl_Boxtype fl_define_FL_SHADOW_BOX();
525#define FL_SHADOW_BOX fl_define_FL_SHADOW_BOX()
526#define FL_SHADOW_FRAME (Fl_Boxtype)(fl_define_FL_SHADOW_BOX()+2)
527extern FL_EXPORT Fl_Boxtype fl_define_FL_ROUNDED_BOX();
528#define FL_ROUNDED_BOX fl_define_FL_ROUNDED_BOX()
529#define FL_ROUNDED_FRAME (Fl_Boxtype)(fl_define_FL_ROUNDED_BOX()+2)
530extern FL_EXPORT Fl_Boxtype fl_define_FL_RFLAT_BOX();
531#define FL_RFLAT_BOX fl_define_FL_RFLAT_BOX()
532extern FL_EXPORT Fl_Boxtype fl_define_FL_RSHADOW_BOX();
533#define FL_RSHADOW_BOX fl_define_FL_RSHADOW_BOX()
534extern FL_EXPORT Fl_Boxtype fl_define_FL_DIAMOND_BOX();
535#define FL_DIAMOND_UP_BOX fl_define_FL_DIAMOND_BOX()
536#define FL_DIAMOND_DOWN_BOX (Fl_Boxtype)(fl_define_FL_DIAMOND_BOX()+1)
537extern FL_EXPORT Fl_Boxtype fl_define_FL_OVAL_BOX();
538#define FL_OVAL_BOX fl_define_FL_OVAL_BOX()
539#define FL_OSHADOW_BOX (Fl_Boxtype)(fl_define_FL_OVAL_BOX()+1)
540#define FL_OVAL_FRAME (Fl_Boxtype)(fl_define_FL_OVAL_BOX()+2)
541#define FL_OFLAT_BOX (Fl_Boxtype)(fl_define_FL_OVAL_BOX()+3)
542
543extern FL_EXPORT Fl_Boxtype fl_define_FL_PLASTIC_UP_BOX();
544#define FL_PLASTIC_UP_BOX fl_define_FL_PLASTIC_UP_BOX()
545#define FL_PLASTIC_DOWN_BOX (Fl_Boxtype)(fl_define_FL_PLASTIC_UP_BOX()+1)
546#define FL_PLASTIC_UP_FRAME (Fl_Boxtype)(fl_define_FL_PLASTIC_UP_BOX()+2)
547#define FL_PLASTIC_DOWN_FRAME (Fl_Boxtype)(fl_define_FL_PLASTIC_UP_BOX()+3)
548#define FL_PLASTIC_THIN_UP_BOX (Fl_Boxtype)(fl_define_FL_PLASTIC_UP_BOX()+4)
549#define FL_PLASTIC_THIN_DOWN_BOX (Fl_Boxtype)(fl_define_FL_PLASTIC_UP_BOX()+5)
550#define FL_PLASTIC_ROUND_UP_BOX (Fl_Boxtype)(fl_define_FL_PLASTIC_UP_BOX()+6)
551#define FL_PLASTIC_ROUND_DOWN_BOX (Fl_Boxtype)(fl_define_FL_PLASTIC_UP_BOX()+7)
552
553extern FL_EXPORT Fl_Boxtype fl_define_FL_GTK_UP_BOX();
554#define FL_GTK_UP_BOX fl_define_FL_GTK_UP_BOX()
555#define FL_GTK_DOWN_BOX (Fl_Boxtype)(fl_define_FL_GTK_UP_BOX()+1)
556#define FL_GTK_UP_FRAME (Fl_Boxtype)(fl_define_FL_GTK_UP_BOX()+2)
557#define FL_GTK_DOWN_FRAME (Fl_Boxtype)(fl_define_FL_GTK_UP_BOX()+3)
558#define FL_GTK_THIN_UP_BOX (Fl_Boxtype)(fl_define_FL_GTK_UP_BOX()+4)
559#define FL_GTK_THIN_DOWN_BOX (Fl_Boxtype)(fl_define_FL_GTK_UP_BOX()+5)
560#define FL_GTK_THIN_UP_FRAME (Fl_Boxtype)(fl_define_FL_GTK_UP_BOX()+6)
561#define FL_GTK_THIN_DOWN_FRAME (Fl_Boxtype)(fl_define_FL_GTK_UP_BOX()+7)
562#define FL_GTK_ROUND_UP_BOX (Fl_Boxtype)(fl_define_FL_GTK_UP_BOX()+8)
563#define FL_GTK_ROUND_DOWN_BOX (Fl_Boxtype)(fl_define_FL_GTK_UP_BOX()+9)
564
565// conversions of box types to other boxtypes:
566/**
567 Get the filled version of a frame.
568 If no filled version of a given frame exists, the behavior of this function
569 is undefined and some random box or frame is returned.
570 */
571inline Fl_Boxtype fl_box(Fl_Boxtype b) {
572 return (Fl_Boxtype)((b<FL_UP_BOX||b%4>1)?b:(b-2));
573}
574/**
575 Get the "pressed" or "down" version of a box.
576 If no "down" version of a given box exists, the behavior of this function
577 is undefined and some random box or frame is returned.
578 */
579inline Fl_Boxtype fl_down(Fl_Boxtype b) {
580 return (Fl_Boxtype)((b<FL_UP_BOX)?b:(b|1));
581}
582/**
583 Get the unfilled, frame only version of a box.
584 If no frame version of a given box exists, the behavior of this function
585 is undefined and some random box or frame is returned.
586 */
587inline Fl_Boxtype fl_frame(Fl_Boxtype b) {
588 return (Fl_Boxtype)((b%4<2)?b:(b+2));
589}
590
591// back-compatibility box types:
592#define FL_FRAME FL_ENGRAVED_FRAME
593#define FL_FRAME_BOX FL_ENGRAVED_BOX
594#define FL_CIRCLE_BOX FL_ROUND_DOWN_BOX
595#define FL_DIAMOND_BOX FL_DIAMOND_DOWN_BOX
596
597/*@}*/ // group: Box Types
598
599/**
600 The labeltype() method sets the type of the label.
601
602 The following standard label types are included:
603
604 \todo The doxygen comments are incomplete, and some labeltypes
605 are starting with an underscore. Also, there are three
606 external functions undocumented (yet):
607 - fl_define_FL_SHADOW_LABEL()
608 - fl_define_FL_ENGRAVED_LABEL()
609 - fl_define_FL_EMBOSSED_LABEL()
610*/
611enum Fl_Labeltype { // labeltypes:
612 FL_NORMAL_LABEL = 0, ///< draws the text (0)
613 FL_NO_LABEL, ///< does nothing
614 _FL_SHADOW_LABEL, ///< draws a drop shadow under the text
615 _FL_ENGRAVED_LABEL, ///< draws edges as though the text is engraved
616 _FL_EMBOSSED_LABEL, ///< draws edges as though the text is raised
617 _FL_MULTI_LABEL, ///< ?
618 _FL_ICON_LABEL, ///< draws the icon associated with the text
619 _FL_IMAGE_LABEL, ///< ?
620
621 FL_FREE_LABELTYPE ///< first free labeltype to use for creating own labeltypes
622};
623
624/**
625 Sets the current label type and return its corresponding Fl_Labeltype value.
626 @{
627*/
628#define FL_SYMBOL_LABEL FL_NORMAL_LABEL
629extern Fl_Labeltype FL_EXPORT fl_define_FL_SHADOW_LABEL();
630#define FL_SHADOW_LABEL fl_define_FL_SHADOW_LABEL()
631extern Fl_Labeltype FL_EXPORT fl_define_FL_ENGRAVED_LABEL();
632#define FL_ENGRAVED_LABEL fl_define_FL_ENGRAVED_LABEL()
633extern Fl_Labeltype FL_EXPORT fl_define_FL_EMBOSSED_LABEL();
634#define FL_EMBOSSED_LABEL fl_define_FL_EMBOSSED_LABEL()
635/** @} */
636
637/** \name Alignment Flags
638 Flags to control the label alignment.
639 This controls how the label is displayed next to or inside the widget.
640 The default value is FL_ALIGN_CENTER for most widgets, which centers the label
641 inside the widget.
642
643 Flags can be or'd to achieve a combination of alignments.
644
645 \code
646 Outside alignments:
647 TOP_LEFT TOP TOP_RIGHT
648 LEFT_TOP+---------------------------------+RIGHT_TOP
649 | |
650 LEFT| |RIGHT
651 | |
652 LEFT_BOTTOM+---------------------------------+RIGHT_BOTTOM
653 BOTTOM_RIGHT BOTTOM BOTTOM_LEFT
654
655 Inside alignments:
656 +---------------------------------+
657 |TOP_LEFT TOP TOP_RIGHT|
658 | |
659 |LEFT RIGHT|
660 | |
661 |BOTTOM_RIGHT BOTTOM BOTTOM_LEFT|
662 +---------------------------------+
663 \endcode
664 \see #FL_ALIGN_CENTER, etc.
665 */
666/*@{*/
667/** FLTK type for alignment control */
668typedef unsigned Fl_Align;
669 /** Align the label horizontally in the middle. */
670const Fl_Align FL_ALIGN_CENTER = (Fl_Align)0;
671 /** Align the label at the top of the widget. Inside labels appear below the top,
672 outside labels are drawn on top of the widget. */
673const Fl_Align FL_ALIGN_TOP = (Fl_Align)1;
674 /** Align the label at the bottom of the widget. */
675const Fl_Align FL_ALIGN_BOTTOM = (Fl_Align)2;
676 /** Align the label at the left of the widget. Inside labels appear left-justified
677 starting at the left side of the widget, outside labels are right-justified and
678 drawn to the left of the widget. */
679const Fl_Align FL_ALIGN_LEFT = (Fl_Align)4;
680 /** Align the label to the right of the widget. */
681const Fl_Align FL_ALIGN_RIGHT = (Fl_Align)8;
682 /** Draw the label inside of the widget. */
683const Fl_Align FL_ALIGN_INSIDE = (Fl_Align)16;
684 /** If the label contains an image, draw the text on top of the image. */
685const Fl_Align FL_ALIGN_TEXT_OVER_IMAGE = (Fl_Align)0x0020;
686 /** If the label contains an image, draw the text below the image. */
687const Fl_Align FL_ALIGN_IMAGE_OVER_TEXT = (Fl_Align)0x0000;
688 /** All parts of the label that are lager than the widget will not be drawn . */
689const Fl_Align FL_ALIGN_CLIP = (Fl_Align)64;
690 /** Wrap text that does not fit the width of the widget. */
691const Fl_Align FL_ALIGN_WRAP = (Fl_Align)128;
692 /** If the label contains an image, draw the text to the right of the image. */
693const Fl_Align FL_ALIGN_IMAGE_NEXT_TO_TEXT = (Fl_Align)0x0100;
694 /** If the label contains an image, draw the text to the left of the image. */
695const Fl_Align FL_ALIGN_TEXT_NEXT_TO_IMAGE = (Fl_Align)0x0120;
696/** If the label contains an image, draw the image or deimage in the background. */
697const Fl_Align FL_ALIGN_IMAGE_BACKDROP = (Fl_Align)0x0200;
698const Fl_Align FL_ALIGN_TOP_LEFT = FL_ALIGN_TOP | FL_ALIGN_LEFT;
699const Fl_Align FL_ALIGN_TOP_RIGHT = FL_ALIGN_TOP | FL_ALIGN_RIGHT;
700const Fl_Align FL_ALIGN_BOTTOM_LEFT = FL_ALIGN_BOTTOM | FL_ALIGN_LEFT;
701const Fl_Align FL_ALIGN_BOTTOM_RIGHT = FL_ALIGN_BOTTOM | FL_ALIGN_RIGHT;
702const Fl_Align FL_ALIGN_LEFT_TOP = 0x0007; // magic value
703const Fl_Align FL_ALIGN_RIGHT_TOP = 0x000b; // magic value
704const Fl_Align FL_ALIGN_LEFT_BOTTOM = 0x000d; // magic value
705const Fl_Align FL_ALIGN_RIGHT_BOTTOM = 0x000e; // magic value
706const Fl_Align FL_ALIGN_NOWRAP = (Fl_Align)0; // for back compatibility
707const Fl_Align FL_ALIGN_POSITION_MASK = 0x000f; // left, right, top, bottom
708const Fl_Align FL_ALIGN_IMAGE_MASK = 0x0320; // l/r, t/b, backdrop
709/*@}*/
710
711
712/** \name Font Numbers
713 The following constants define the standard FLTK fonts:
714 */
715/*@{*/
716/** A font number is an index into the internal font table. */
717typedef int Fl_Font;
718
719const Fl_Font FL_HELVETICA = 0; ///< Helvetica (or Arial) normal (0)
720const Fl_Font FL_HELVETICA_BOLD = 1; ///< Helvetica (or Arial) bold
721const Fl_Font FL_HELVETICA_ITALIC = 2; ///< Helvetica (or Arial) oblique
722const Fl_Font FL_HELVETICA_BOLD_ITALIC = 3; ///< Helvetica (or Arial) bold-oblique
723const Fl_Font FL_COURIER = 4; ///< Courier normal
724const Fl_Font FL_COURIER_BOLD = 5; ///< Courier bold
725const Fl_Font FL_COURIER_ITALIC = 6; ///< Courier italic
726const Fl_Font FL_COURIER_BOLD_ITALIC = 7; ///< Courier bold-italic
727const Fl_Font FL_TIMES = 8; ///< Times roman
728const Fl_Font FL_TIMES_BOLD = 9; ///< Times roman bold
729const Fl_Font FL_TIMES_ITALIC = 10; ///< Times roman italic
730const Fl_Font FL_TIMES_BOLD_ITALIC = 11; ///< Times roman bold-italic
731const Fl_Font FL_SYMBOL = 12; ///< Standard symbol font
732const Fl_Font FL_SCREEN = 13; ///< Default monospaced screen font
733const Fl_Font FL_SCREEN_BOLD = 14; ///< Default monospaced bold screen font
734const Fl_Font FL_ZAPF_DINGBATS = 15; ///< Zapf-dingbats font
735
736const Fl_Font FL_FREE_FONT = 16; ///< first one to allocate
737const Fl_Font FL_BOLD = 1; ///< add this to helvetica, courier, or times
738const Fl_Font FL_ITALIC = 2; ///< add this to helvetica, courier, or times
739const Fl_Font FL_BOLD_ITALIC = 3; ///< add this to helvetica, courier, or times
740
741/*@}*/
742
743/** Size of a font in pixels.
744 This is the approximate height of a font in pixels.
745 */
746typedef int Fl_Fontsize;
747
748extern FL_EXPORT Fl_Fontsize FL_NORMAL_SIZE; ///< normal font size
749
750/** \name Colors
751 The Fl_Color type holds an FLTK color value.
752
753 Colors are either 8-bit indexes into a virtual colormap
754 or 24-bit RGB color values.
755
756 Color indices occupy the lower 8 bits of the value, while
757 RGB colors occupy the upper 24 bits, for a byte organization of RGBI.
758
759<pre>
760 Fl_Color => 0xrrggbbii
761 | | | |
762 | | | +--- index between 0 and 255
763 | | +----- blue color component (8 bit)
764 | +------- green component (8 bit)
765 +--------- red component (8 bit)
766 </pre>
767
768 A color can have either an index or an rgb value. Colors with rgb set
769 and an index >0 are reserved for special use.
770
771 */
772/*@{*/
773/** an FLTK color value */
774typedef unsigned int Fl_Color;
775
776// Standard colors. These are used as default colors in widgets and altered as necessary
777const Fl_Color FL_FOREGROUND_COLOR = 0; ///< the default foreground color (0) used for labels and text
778const Fl_Color FL_BACKGROUND2_COLOR = 7; ///< the default background color for text, list, and valuator widgets
779const Fl_Color FL_INACTIVE_COLOR = 8; ///< the inactive foreground color
780const Fl_Color FL_SELECTION_COLOR = 15; ///< the default selection/highlight color
781
782 // boxtypes generally limit themselves to these colors so
783 // the whole ramp is not allocated:
784
785const Fl_Color FL_GRAY0 = 32; // 'A'
786const Fl_Color FL_DARK3 = 39; // 'H'
787const Fl_Color FL_DARK2 = 45; // 'N'
788const Fl_Color FL_DARK1 = 47; // 'P'
789const Fl_Color FL_BACKGROUND_COLOR = 49; // 'R' default background color
790const Fl_Color FL_LIGHT1 = 50; // 'S'
791const Fl_Color FL_LIGHT2 = 52; // 'U'
792const Fl_Color FL_LIGHT3 = 54; // 'W'
793
794 // FLTK provides a 5x8x5 color cube that is used with colormap visuals
795
796const Fl_Color FL_BLACK = 56;
797const Fl_Color FL_RED = 88;
798const Fl_Color FL_GREEN = 63;
799const Fl_Color FL_YELLOW = 95;
800const Fl_Color FL_BLUE = 216;
801const Fl_Color FL_MAGENTA = 248;
802const Fl_Color FL_CYAN = 223;
803const Fl_Color FL_DARK_RED = 72;
804
805const Fl_Color FL_DARK_GREEN = 60;
806const Fl_Color FL_DARK_YELLOW = 76;
807const Fl_Color FL_DARK_BLUE = 136;
808const Fl_Color FL_DARK_MAGENTA = 152;
809const Fl_Color FL_DARK_CYAN = 140;
810
811const Fl_Color FL_WHITE = 255;
812
813
814#define FL_FREE_COLOR (Fl_Color)16
815#define FL_NUM_FREE_COLOR 16
816#define FL_GRAY_RAMP (Fl_Color)32
817#define FL_NUM_GRAY 24
818#define FL_GRAY FL_BACKGROUND_COLOR
819#define FL_COLOR_CUBE (Fl_Color)56
820#define FL_NUM_RED 5
821#define FL_NUM_GREEN 8
822#define FL_NUM_BLUE 5
823
824FL_EXPORT Fl_Color fl_inactive(Fl_Color c);
825
826FL_EXPORT Fl_Color fl_contrast(Fl_Color fg, Fl_Color bg);
827
828FL_EXPORT Fl_Color fl_color_average(Fl_Color c1, Fl_Color c2, float weight);
829
830/** Returns a lighter version of the specified color. */
831inline Fl_Color fl_lighter(Fl_Color c) { return fl_color_average(c, FL_WHITE, .67f); }
832
833/** Returns a darker version of the specified color. */
834inline Fl_Color fl_darker(Fl_Color c) { return fl_color_average(c, FL_BLACK, .67f); }
835
836/** Returns the 24-bit color value closest to \p r, \p g, \p b. */
837inline Fl_Color fl_rgb_color(uchar r, uchar g, uchar b) {
838 if (!r && !g && !b) return FL_BLACK;
839 else return (Fl_Color)(((((r << 8) | g) << 8) | b) << 8);
840}
841
842/** Returns the 24-bit color value closest to \p g (grayscale). */
843inline Fl_Color fl_rgb_color(uchar g) {
844 if (!g) return FL_BLACK;
845 else return (Fl_Color)(((((g << 8) | g) << 8) | g) << 8);
846}
847
848/** Returns a gray color value from black (i == 0) to white (i == FL_NUM_GRAY - 1).
849 FL_NUM_GRAY is defined to be 24 in the current FLTK release.
850 To get the closest FLTK gray value to an 8-bit grayscale color 'I' use:
851
852 \code
853 fl_gray_ramp(I * (FL_NUM_GRAY - 1) / 255)
854 \endcode
855*/
856inline Fl_Color fl_gray_ramp(int i) {return (Fl_Color)(i+FL_GRAY_RAMP);}
857
858/** Returns a color out of the color cube.
859
860 \p r must be in the range 0 to FL_NUM_RED (5) minus 1,
861 \p g must be in the range 0 to FL_NUM_GREEN (8) minus 1,
862 \p b must be in the range 0 to FL_NUM_BLUE (5) minus 1.
863
864 To get the closest color to a 8-bit set of R,G,B values use:
865
866 \code
867 fl_color_cube(R * (FL_NUM_RED - 1) / 255,
868 G * (FL_NUM_GREEN - 1) / 255,
869 B * (FL_NUM_BLUE - 1) / 255);
870 \endcode
871 */
872inline Fl_Color fl_color_cube(int r, int g, int b) {
873 return (Fl_Color)((b*FL_NUM_RED + r) * FL_NUM_GREEN + g + FL_COLOR_CUBE);}
874
875/*@}*/ // group: Colors
876
877/** \name Cursors */
878/*@{*/
879
880/** The following constants define the mouse cursors that are available in FLTK.
881
DRC685f17e2011-07-28 09:23:00 +0000882 Cursors are provided by the system when available, or bitmaps built into
883 FLTK as a fallback.
DRC2ff39b82011-07-28 08:38:59 +0000884
885 \todo enum Fl_Cursor needs maybe an image.
886*/
887enum Fl_Cursor {
DRC685f17e2011-07-28 09:23:00 +0000888 FL_CURSOR_DEFAULT = 0, /**< the default cursor, usually an arrow. */
889 FL_CURSOR_ARROW = 1, /**< an arrow pointer. */
890 FL_CURSOR_CROSS = 2, /**< crosshair. */
891 FL_CURSOR_WAIT = 3, /**< busy indicator (e.g. hourglass). */
892 FL_CURSOR_INSERT = 4, /**< I-beam. */
893 FL_CURSOR_HAND = 5, /**< pointing hand. */
894 FL_CURSOR_HELP = 6, /**< question mark pointer. */
895 FL_CURSOR_MOVE = 7, /**< 4-pointed arrow or hand. */
896
897 /* Resize indicators */
898 FL_CURSOR_NS = 101, /**< up/down resize. */
899 FL_CURSOR_WE = 102, /**< left/right resize. */
900 FL_CURSOR_NWSE = 103, /**< diagonal resize. */
901 FL_CURSOR_NESW = 104, /**< diagonal resize. */
902 FL_CURSOR_NE = 110, /**< upwards, right resize. */
903 FL_CURSOR_N = 111, /**< upwards resize. */
904 FL_CURSOR_NW = 112, /**< upwards, left resize. */
905 FL_CURSOR_E = 113, /**< leftwards resize. */
906 FL_CURSOR_W = 114, /**< rightwards resize. */
907 FL_CURSOR_SE = 115, /**< downwards, right resize. */
908 FL_CURSOR_S = 116, /**< downwards resize. */
909 FL_CURSOR_SW = 117, /**< downwards, left resize. */
910
911 FL_CURSOR_NONE = 255, /**< invisible. */
DRC2ff39b82011-07-28 08:38:59 +0000912};
913/*@}*/ // group: Cursors
914
915/** FD "when" conditions */
916enum { // values for "when" passed to Fl::add_fd()
917 FL_READ = 1, /**< Call the callback when there is data to be read. */
918 FL_WRITE = 4, /**< Call the callback when data can be written without blocking. */
919 FL_EXCEPT = 8 /**< Call the callback if an exception occurs on the file. */
920};
921
922/** visual types and Fl_Gl_Window::mode() (values match Glut) */
923enum Fl_Mode {
924 FL_RGB = 0,
925 FL_INDEX = 1,
926 FL_SINGLE = 0,
927 FL_DOUBLE = 2,
928 FL_ACCUM = 4,
929 FL_ALPHA = 8,
930 FL_DEPTH = 16,
931 FL_STENCIL = 32,
932 FL_RGB8 = 64,
933 FL_MULTISAMPLE= 128,
934 FL_STEREO = 256,
935 FL_FAKE_SINGLE = 512 // Fake single buffered windows using double-buffer
936};
937
938// image alpha blending
939
940#define FL_IMAGE_WITH_ALPHA 0x40000000
941
942/** Damage masks */
943enum Fl_Damage {
944 FL_DAMAGE_CHILD = 0x01, /**< A child needs to be redrawn. */
945 FL_DAMAGE_EXPOSE = 0x02, /**< The window was exposed. */
946 FL_DAMAGE_SCROLL = 0x04, /**< The Fl_Scroll widget was scrolled. */
947 FL_DAMAGE_OVERLAY = 0x08, /**< The overlay planes need to be redrawn. */
948 FL_DAMAGE_USER1 = 0x10, /**< First user-defined damage bit. */
949 FL_DAMAGE_USER2 = 0x20, /**< Second user-defined damage bit. */
950 FL_DAMAGE_ALL = 0x80 /**< Everything needs to be redrawn. */
951};
952
953// FLTK 1.0.x compatibility definitions...
954# ifdef FLTK_1_0_COMPAT
955# define contrast fl_contrast
956# define down fl_down
957# define frame fl_frame
958# define inactive fl_inactive
959# endif // FLTK_1_0_COMPAT
960
961#endif
962
963//
964// End of "$Id: Enumerations.H 8710 2011-05-21 21:55:59Z manolo $".
965//