1 // 2 // "$Id: Fl.H 8724 2011-05-23 18:01:29Z manolo $" 3 // 4 // Main header file for the Fast Light Tool Kit (FLTK). 5 // 6 // Copyright 1998-2010 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 Fl static class. 30 */ 31 32 #ifndef Fl_H 33 # define Fl_H 34 35 # include <FL/Fl_Cairo.H> 36 37 # include "fl_utf8.h" 38 # include "Enumerations.H" 39 # ifndef Fl_Object 40 # define Fl_Object Fl_Widget /**< for back compatibility - use Fl_Widget! */ 41 # endif 42 43 # ifdef check 44 # undef check 45 # endif 46 47 48 class Fl_Widget; 49 class Fl_Window; 50 class Fl_Image; 51 struct Fl_Label; 52 53 54 /** \defgroup callback_functions Callback function typedefs 55 \brief Typedefs defined in <FL/Fl.H> for callback or handler functions passed as function parameters. 56 57 FLTK uses callback functions as parameters for some function calls, e.g. to 58 set up global event handlers (Fl::add_handler()), to add a timeout handler 59 (Fl::add_timeout()), and many more. 60 61 The typedefs defined in this group describe the function parameters used to set 62 up or clear the callback functions and should also be referenced to define the 63 callback function to handle such events in the user's code. 64 65 \see Fl::add_handler(), Fl::add_timeout(), Fl::repeat_timeout(), 66 Fl::remove_timeout() and others 67 @{ */ 68 69 /** Signature of some label drawing functions passed as parameters */ 70 typedef void (Fl_Label_Draw_F)(const Fl_Label *label, int x, int y, int w, int h, Fl_Align align); 71 72 /** Signature of some label measurement functions passed as parameters */ 73 typedef void (Fl_Label_Measure_F)(const Fl_Label *label, int &width, int &height); 74 75 /** Signature of some box drawing functions passed as parameters */ 76 typedef void (Fl_Box_Draw_F)(int x, int y, int w, int h, Fl_Color color); 77 78 /** Signature of some timeout callback functions passed as parameters */ 79 typedef void (*Fl_Timeout_Handler)(void *data); 80 81 /** Signature of some wakeup callback functions passed as parameters */ 82 typedef void (*Fl_Awake_Handler)(void *data); 83 84 /** Signature of add_idle callback functions passed as parameters */ 85 typedef void (*Fl_Idle_Handler)(void *data); 86 87 /** Signature of set_idle callback functions passed as parameters */ 88 typedef void (*Fl_Old_Idle_Handler)(); 89 90 /** Signature of add_fd functions passed as parameters */ 91 typedef void (*Fl_FD_Handler)(int fd, void *data); 92 93 /** Signature of add_handler functions passed as parameters */ 94 typedef int (*Fl_Event_Handler)(int event); 95 96 /** Signature of set_abort functions passed as parameters */ 97 typedef void (*Fl_Abort_Handler)(const char *format,...); 98 99 /** Signature of set_atclose functions passed as parameters */ 100 typedef void (*Fl_Atclose_Handler)(Fl_Window *window, void *data); 101 102 /** Signature of args functions passed as parameters */ 103 typedef int (*Fl_Args_Handler)(int argc, char **argv, int &i); 104 105 /** Signature of event_dispatch functions passed as parameters. 106 \see Fl::event_dispatch(Fl_Event_Dispatch) */ 107 typedef int (*Fl_Event_Dispatch)(int event, Fl_Window *w); 108 109 /** @} */ /* group callback_functions */ 110 111 112 /** 113 The Fl is the FLTK global (static) class containing 114 state information and global methods for the current application. 115 */ 116 class FL_EXPORT Fl { Fl()117 Fl() {}; // no constructor! 118 119 public: // should be private! 120 #ifndef FL_DOXYGEN 121 static int e_number; 122 static int e_x; 123 static int e_y; 124 static int e_x_root; 125 static int e_y_root; 126 static int e_dx; 127 static int e_dy; 128 static int e_state; 129 static int e_clicks; 130 static int e_is_click; 131 static int e_keysym; 132 static char* e_text; 133 static int e_length; 134 static Fl_Event_Dispatch e_dispatch; 135 static Fl_Widget* belowmouse_; 136 static Fl_Widget* pushed_; 137 static Fl_Widget* focus_; 138 static int damage_; 139 static Fl_Widget* selection_owner_; 140 static Fl_Window* modal_; 141 static Fl_Window* grab_; 142 static int compose_state; 143 #endif 144 /** 145 If true then flush() will do something. 146 */ damage(int d)147 static void damage(int d) {damage_ = d;} 148 149 public: 150 /** Enumerator for global FLTK options. 151 These options can be set system wide, per user, or for the running 152 application only. 153 \see Fl::option(Fl_Option, bool) 154 \see Fl::option(Fl_Option) 155 */ 156 typedef enum { 157 /// When switched on, moving the text cursor beyond the start or end of 158 /// a text in a text widget will change focus to the next text widget. 159 /// When switched off, the cursor will stop at the end of the text. 160 /// Pressing Tab or Ctrl-Tab will advance the keyboard focus. 161 OPTION_ARROW_FOCUS = 0, 162 // When switched on, FLTK will use the file chooser dialog that comes 163 // with your operating system whenever possible. When switched off, FLTK 164 // will present its own file chooser. 165 // \todo implement me 166 // OPTION_NATIVE_FILECHOOSER, 167 // When Filechooser Preview is enabled, the FLTK or native file chooser 168 // will show a preview of a selected file (if possible) before the user 169 // decides to choose the file. 170 // \todo implement me 171 //OPTION_FILECHOOSER_PREVIEW, 172 /// If visible focus is switched on, FLTK will draw a dotted rectangle 173 /// inside the widget that will receive the next keystroke. If switched 174 /// off, no such indicator will be drawn and keyboard navigation 175 /// is disabled. 176 OPTION_VISIBLE_FOCUS, 177 /// If text drag-and-drop is enabled, the user can select and drag text 178 /// from any text widget. If disabled, no dragging is possible, however 179 /// dropping text from other applications still works. 180 OPTION_DND_TEXT, 181 /// If tooltips are enabled, hovering the mouse over a widget with a 182 /// tooltip text will open a little tooltip window until the mouse leaves 183 /// the widget. If disabled, no tooltip is shown. 184 OPTION_SHOW_TOOLTIPS, 185 // don't change this, leave it always as the last element 186 /// For internal use only. 187 OPTION_LAST 188 } Fl_Option; 189 190 private: 191 static unsigned char options_[OPTION_LAST]; 192 static unsigned char options_read_; 193 194 public: 195 /* 196 Return a global setting for all FLTK applications, possibly overridden 197 by a setting specifically for this application. 198 */ 199 static bool option(Fl_Option opt); 200 201 /* 202 Override an option while the application is running. 203 */ 204 static void option(Fl_Option opt, bool val); 205 206 /** 207 The currently executing idle callback function: DO NOT USE THIS DIRECTLY! 208 209 This is now used as part of a higher level system allowing multiple 210 idle callback functions to be called. 211 \see add_idle(), remove_idle() 212 */ 213 static void (*idle)(); 214 215 #ifndef FL_DOXYGEN 216 static Fl_Awake_Handler *awake_ring_; 217 static void **awake_data_; 218 static int awake_ring_size_; 219 static int awake_ring_head_; 220 static int awake_ring_tail_; 221 static const char* scheme_; 222 static Fl_Image* scheme_bg_; 223 224 static int e_original_keysym; // late addition 225 static int scrollbar_size_; 226 #endif 227 228 229 static int add_awake_handler_(Fl_Awake_Handler, void*); 230 static int get_awake_handler_(Fl_Awake_Handler&, void*&); 231 232 public: 233 234 // API version number 235 static double version(); 236 237 // argument parsers: 238 static int arg(int argc, char **argv, int& i); 239 static int args(int argc, char **argv, int& i, Fl_Args_Handler cb = 0); 240 static void args(int argc, char **argv); 241 /** 242 Usage string displayed if Fl::args() detects an invalid argument. 243 This may be changed to point to customized text at run-time. 244 */ 245 static const char* const help; 246 247 // things called by initialization: 248 static void display(const char*); 249 static int visual(int); 250 /** 251 This does the same thing as Fl::visual(int) but also requires OpenGL 252 drawing to work. This <I>must</I> be done if you want to draw in 253 normal windows with OpenGL with gl_start() and gl_end(). 254 It may be useful to call this so your X windows use the same visual 255 as an Fl_Gl_Window, which on some servers will reduce colormap flashing. 256 257 See Fl_Gl_Window for a list of additional values for the argument. 258 */ 259 static int gl_visual(int, int *alist=0); // platform dependent 260 static void own_colormap(); 261 static void get_system_colors(); 262 static void foreground(uchar, uchar, uchar); 263 static void background(uchar, uchar, uchar); 264 static void background2(uchar, uchar, uchar); 265 266 // schemes: 267 static int scheme(const char*); 268 /** See void scheme(const char *name) */ scheme()269 static const char* scheme() {return scheme_;} 270 /** 271 Called by scheme according to scheme name. 272 Loads or reloads the current scheme selection. 273 See void scheme(const char *name) 274 */ 275 static int reload_scheme(); // platform dependent 276 scheme_bg(Fl_Image * i)277 static void scheme_bg ( Fl_Image *i ) { scheme_bg_ = i; } 278 static int scrollbar_size(); 279 static void scrollbar_size(int W); 280 281 // execution: 282 static int wait(); 283 static double wait(double time); 284 static int check(); 285 static int ready(); 286 static int run(); 287 static Fl_Widget* readqueue(); 288 /** 289 Adds a one-shot timeout callback. The function will be called by 290 Fl::wait() at <i>t</i> seconds after this function is called. 291 The optional void* argument is passed to the callback. 292 293 You can have multiple timeout callbacks. To remove a timeout 294 callback use Fl::remove_timeout(). 295 296 If you need more accurate, repeated timeouts, use Fl::repeat_timeout() to 297 reschedule the subsequent timeouts. 298 299 The following code will print "TICK" each second on 300 stdout with a fair degree of accuracy: 301 302 \code 303 void callback(void*) { 304 puts("TICK"); 305 Fl::repeat_timeout(1.0, callback); 306 } 307 308 int main() { 309 Fl::add_timeout(1.0, callback); 310 return Fl::run(); 311 } 312 \endcode 313 */ 314 static void add_timeout(double t, Fl_Timeout_Handler,void* = 0); // platform dependent 315 /** 316 Repeats a timeout callback from the expiration of the 317 previous timeout, allowing for more accurate timing. You may only call 318 this method inside a timeout callback. 319 320 The following code will print "TICK" each second on 321 stdout with a fair degree of accuracy: 322 323 \code 324 void callback(void*) { 325 puts("TICK"); 326 Fl::repeat_timeout(1.0, callback); 327 } 328 329 int main() { 330 Fl::add_timeout(1.0, callback); 331 return Fl::run(); 332 } 333 \endcode 334 */ 335 static void repeat_timeout(double t, Fl_Timeout_Handler, void* = 0); // platform dependent 336 static int has_timeout(Fl_Timeout_Handler, void* = 0); 337 static void remove_timeout(Fl_Timeout_Handler, void* = 0); 338 static void add_check(Fl_Timeout_Handler, void* = 0); 339 static int has_check(Fl_Timeout_Handler, void* = 0); 340 static void remove_check(Fl_Timeout_Handler, void* = 0); 341 /** 342 Adds file descriptor fd to listen to. 343 344 When the fd becomes ready for reading Fl::wait() will call the 345 callback and then return. The callback is passed the fd and the 346 arbitrary void* argument. 347 348 The second version takes a when bitfield, with the bits 349 FL_READ, FL_WRITE, and FL_EXCEPT defined, 350 to indicate when the callback should be done. 351 352 There can only be one callback of each type for a file descriptor. 353 Fl::remove_fd() gets rid of <I>all</I> the callbacks for a given 354 file descriptor. 355 356 Under UNIX <I>any</I> file descriptor can be monitored (files, 357 devices, pipes, sockets, etc.). Due to limitations in Microsoft Windows, 358 WIN32 applications can only monitor sockets. 359 */ 360 static void add_fd(int fd, int when, Fl_FD_Handler cb, void* = 0); // platform dependent 361 /** See void add_fd(int fd, int when, Fl_FD_Handler cb, void* = 0) */ 362 static void add_fd(int fd, Fl_FD_Handler cb, void* = 0); // platform dependent 363 /** Removes a file descriptor handler. */ 364 static void remove_fd(int, int when); // platform dependent 365 /** Removes a file descriptor handler. */ 366 static void remove_fd(int); // platform dependent 367 368 static void add_idle(Fl_Idle_Handler cb, void* data = 0); 369 static int has_idle(Fl_Idle_Handler cb, void* data = 0); 370 static void remove_idle(Fl_Idle_Handler cb, void* data = 0); 371 /** If true then flush() will do something. */ damage()372 static int damage() {return damage_;} 373 static void redraw(); 374 static void flush(); 375 /** \addtogroup group_comdlg 376 @{ */ 377 /** 378 FLTK calls Fl::warning() to output a warning message. 379 380 The default version on Windows returns \e without printing a warning 381 message, because Windows programs normally don't have stderr (a console 382 window) enabled. 383 384 The default version on all other platforms prints the warning message to stderr. 385 386 You can override the behavior by setting the function pointer to your 387 own routine. 388 389 Fl::warning() means that there was a recoverable problem, the display may 390 be messed up, but the user can probably keep working - all X protocol 391 errors call this, for example. The default implementation returns after 392 displaying the message. 393 \note \#include <FL/Fl.H> 394 */ 395 static void (*warning)(const char*, ...); 396 /** 397 FLTK calls Fl::error() to output a normal error message. 398 399 The default version on Windows displays the error message in a MessageBox window. 400 401 The default version on all other platforms prints the error message to stderr. 402 403 You can override the behavior by setting the function pointer to your 404 own routine. 405 406 Fl::error() means there is a recoverable error such as the inability to read 407 an image file. The default implementation returns after displaying the message. 408 \note \#include <FL/Fl.H> 409 */ 410 static void (*error)(const char*, ...); 411 /** 412 FLTK calls Fl::fatal() to output a fatal error message. 413 414 The default version on Windows displays the error message in a MessageBox window. 415 416 The default version on all other platforms prints the error message to stderr. 417 418 You can override the behavior by setting the function pointer to your 419 own routine. 420 421 Fl::fatal() must not return, as FLTK is in an unusable state, however your 422 version may be able to use longjmp or an exception to continue, as long as 423 it does not call FLTK again. The default implementation exits with status 1 424 after displaying the message. 425 \note \#include <FL/Fl.H> 426 */ 427 static void (*fatal)(const char*, ...); 428 /** @} */ 429 430 /** \defgroup fl_windows Windows handling functions 431 \brief Windows and standard dialogs handling declared in <FL/Fl.H> 432 @{ */ 433 static Fl_Window* first_window(); 434 static void first_window(Fl_Window*); 435 static Fl_Window* next_window(const Fl_Window*); 436 437 /** 438 Returns the top-most modal() window currently shown. 439 440 This is the most recently shown() window with modal() true, or NULL 441 if there are no modal() windows shown(). 442 The modal() window has its handle() method called 443 for all events, and no other windows will have handle() 444 called (grab() overrides this). 445 */ modal()446 static Fl_Window* modal() {return modal_;} 447 /** Returns the window that currently receives all events. 448 449 \return The window that currently receives all events, 450 or NULL if event grabbing is currently OFF. 451 */ grab()452 static Fl_Window* grab() {return grab_;} 453 /** Selects the window to grab. 454 This is used when pop-up menu systems are active. 455 456 Send all events to the passed window no matter where the pointer or 457 focus is (including in other programs). The window <I>does not have 458 to be shown()</I> , this lets the handle() method of a 459 "dummy" window override all event handling and allows you to 460 map and unmap a complex set of windows (under both X and WIN32 461 <I>some</I> window must be mapped because the system interface needs a 462 window id). 463 464 If grab() is on it will also affect show() of windows by doing 465 system-specific operations (on X it turns on override-redirect). 466 These are designed to make menus popup reliably 467 and faster on the system. 468 469 To turn off grabbing do Fl::grab(0). 470 471 <I>Be careful that your program does not enter an infinite loop 472 while grab() is on. On X this will lock up your screen!</I> 473 To avoid this potential lockup, all newer operating systems seem to 474 limit mouse pointer grabbing to the time during which a mouse button 475 is held down. Some OS's may not support grabbing at all. 476 */ 477 static void grab(Fl_Window*); // platform dependent 478 /** @} */ 479 480 /** \defgroup fl_events Events handling functions 481 Fl class events handling API declared in <FL/Fl.H> 482 @{ 483 */ 484 // event information: 485 /** 486 Returns the last event that was processed. This can be used 487 to determine if a callback is being done in response to a 488 keypress, mouse click, etc. 489 */ event()490 static int event() {return e_number;} 491 /** 492 Returns the mouse position of the event relative to the Fl_Window 493 it was passed to. 494 */ event_x()495 static int event_x() {return e_x;} 496 /** 497 Returns the mouse position of the event relative to the Fl_Window 498 it was passed to. 499 */ event_y()500 static int event_y() {return e_y;} 501 /** 502 Returns the mouse position on the screen of the event. To find the 503 absolute position of an Fl_Window on the screen, use the 504 difference between event_x_root(),event_y_root() and 505 event_x(),event_y(). 506 */ event_x_root()507 static int event_x_root() {return e_x_root;} 508 /** 509 Returns the mouse position on the screen of the event. To find the 510 absolute position of an Fl_Window on the screen, use the 511 difference between event_x_root(),event_y_root() and 512 event_x(),event_y(). 513 */ event_y_root()514 static int event_y_root() {return e_y_root;} 515 /** 516 Returns the current horizontal mouse scrolling associated with the 517 FL_MOUSEWHEEL event. Right is positive. 518 */ event_dx()519 static int event_dx() {return e_dx;} 520 /** 521 Returns the current vertical mouse scrolling associated with the 522 FL_MOUSEWHEEL event. Down is positive. 523 */ event_dy()524 static int event_dy() {return e_dy;} 525 /** 526 Return where the mouse is on the screen by doing a round-trip query to 527 the server. You should use Fl::event_x_root() and 528 Fl::event_y_root() if possible, but this is necessary if you are 529 not sure if a mouse event has been processed recently (such as to 530 position your first window). If the display is not open, this will 531 open it. 532 */ 533 static void get_mouse(int &,int &); // platform dependent 534 /** 535 Set the pointer position in screen relative coordinates 536 */ 537 static void set_mouse(int x,int y); // platform dependent 538 /** 539 Returns non zero if we had a double click event. 540 \retval Non-zero if the most recent FL_PUSH or FL_KEYBOARD was a "double click". 541 \retval N-1 for N clicks. 542 A double click is counted if the same button is pressed 543 again while event_is_click() is true. 544 */ event_clicks()545 static int event_clicks() {return e_clicks;} 546 /** 547 Manually sets the number returned by Fl::event_clicks(). 548 This can be used to set it to zero so that 549 later code does not think an item was double-clicked. 550 \param[in] i corresponds to no double-click if 0, i+1 mouse clicks otherwise 551 \see int event_clicks() 552 */ event_clicks(int i)553 static void event_clicks(int i) {e_clicks = i;} 554 /** 555 Returns non-zero if the mouse has not moved far enough 556 and not enough time has passed since the last FL_PUSH or 557 FL_KEYBOARD event for it to be considered a "drag" rather than a 558 "click". You can test this on FL_DRAG, FL_RELEASE, 559 and FL_MOVE events. 560 */ event_is_click()561 static int event_is_click() {return e_is_click;} 562 /** 563 Clears the value returned by Fl::event_is_click(). 564 Useful to prevent the <I>next</I> 565 click from being counted as a double-click or to make a popup menu 566 pick an item with a single click. Don't pass non-zero to this. 567 */ event_is_click(int i)568 static void event_is_click(int i) {e_is_click = i;} 569 /** 570 Gets which particular mouse button caused the current event. 571 This returns garbage if the most recent event was not a FL_PUSH or FL_RELEASE event. 572 \retval FL_LEFT_MOUSE \retval FL_MIDDLE_MOUSE \retval FL_RIGHT_MOUSE. 573 \see Fl::event_buttons() 574 */ event_button()575 static int event_button() {return e_keysym-FL_Button;} 576 /** 577 This is a bitfield of what shift states were on and what mouse buttons 578 were held down during the most recent event. The second version 579 returns non-zero if any of the passed bits are turned on. 580 The legal bits are: 581 582 \li FL_SHIFT 583 \li FL_CAPS_LOCK 584 \li FL_CTRL 585 \li FL_ALT 586 \li FL_NUM_LOCK 587 \li FL_META 588 \li FL_SCROLL_LOCK 589 \li FL_BUTTON1 590 \li FL_BUTTON2 591 \li FL_BUTTON3 592 593 X servers do not agree on shift states, and FL_NUM_LOCK, FL_META, and 594 FL_SCROLL_LOCK may not work. The values were selected to match the 595 XFree86 server on Linux. In addition there is a bug in the way X works 596 so that the shift state is not correctly reported until the first event 597 <I>after</I> the shift key is pressed or released. 598 */ event_state()599 static int event_state() {return e_state;} 600 /** See int event_state() */ event_state(int i)601 static int event_state(int i) {return e_state&i;} 602 /** 603 Gets which key on the keyboard was last pushed. 604 605 The returned integer 'key code' is not necessarily a text 606 equivalent for the keystroke. For instance: if someone presses '5' on the 607 numeric keypad with numlock on, Fl::event_key() may return the 'key code' 608 for this key, and NOT the character '5'. To always get the '5', use Fl::event_text() instead. 609 610 \returns an integer 'key code', or 0 if the last event was not a key press or release. 611 \see int event_key(int), event_text(), compose(int&). 612 */ event_key()613 static int event_key() {return e_keysym;} 614 /** 615 Returns the keycode of the last key event, regardless of the NumLock state. 616 617 If NumLock is deactivated, FLTK translates events from the 618 numeric keypad into the corresponding arrow key events. 619 event_key() returns the translated key code, whereas 620 event_original_key() returns the keycode before NumLock translation. 621 */ event_original_key()622 static int event_original_key(){return e_original_keysym;} 623 /** 624 Returns true if the given \p key was held 625 down (or pressed) <I>during</I> the last event. This is constant until 626 the next event is read from the server. 627 628 Fl::get_key(int) returns true if the given key is held down <I>now</I>. 629 Under X this requires a round-trip to the server and is <I>much</I> 630 slower than Fl::event_key(int). 631 632 Keys are identified by the <I>unshifted</I> values. FLTK defines a 633 set of symbols that should work on most modern machines for every key 634 on the keyboard: 635 636 \li All keys on the main keyboard producing a printable ASCII 637 character use the value of that ASCII character (as though shift, 638 ctrl, and caps lock were not on). The space bar is 32. 639 \li All keys on the numeric keypad producing a printable ASCII 640 character use the value of that ASCII character plus FL_KP. 641 The highest possible value is FL_KP_Last so you can 642 range-check to see if something is on the keypad. 643 \li All numbered function keys use the number on the function key plus 644 FL_F. The highest possible number is FL_F_Last, so you 645 can range-check a value. 646 \li Buttons on the mouse are considered keys, and use the button 647 number (where the left button is 1) plus FL_Button. 648 \li All other keys on the keypad have a symbol: FL_Escape, 649 FL_BackSpace, FL_Tab, FL_Enter, FL_Print, FL_Scroll_Lock, FL_Pause, 650 FL_Insert, FL_Home, FL_Page_Up, FL_Delete, FL_End, FL_Page_Down, 651 FL_Left, FL_Up, FL_Right, FL_Down, FL_Shift_L, FL_Shift_R, 652 FL_Control_L, FL_Control_R, FL_Caps_Lock, FL_Alt_L, FL_Alt_R, 653 FL_Meta_L, FL_Meta_R, FL_Menu, FL_Num_Lock, FL_KP_Enter. Be 654 careful not to confuse these with the very similar, but all-caps, 655 symbols used by Fl::event_state(). 656 657 On X Fl::get_key(FL_Button+n) does not work. 658 659 On WIN32 Fl::get_key(FL_KP_Enter) and Fl::event_key(FL_KP_Enter) do not work. 660 */ 661 static int event_key(int key); 662 /** 663 Returns true if the given \p key is held down <I>now</I>. 664 Under X this requires a round-trip to the server and is <I>much</I> 665 slower than Fl::event_key(int). \see event_key(int) 666 */ 667 static int get_key(int key); // platform dependent 668 /** 669 Returns the text associated with the current event, including FL_PASTE or FL_DND_RELEASE events. 670 This can be used in response to FL_KEYUP, FL_KEYDOWN, FL_PASTE, FL_DND_RELEASE. 671 672 When responding to FL_KEYUP/FL_KEYDOWN, use this function instead of Fl::event_key() 673 to get the text equivalent of keystrokes suitable for inserting into strings 674 and text widgets. 675 676 The returned string is guaranteed to be be NULL terminated. 677 However, see Fl::event_length() for the actual length of the string, 678 in case the string itself contains NULLs that are part of the text data. 679 680 \returns A NULL terminated text string equivalent of the last keystroke. 681 */ event_text()682 static const char* event_text() {return e_text;} 683 /** 684 Returns the length of the text in Fl::event_text(). There 685 will always be a nul at this position in the text. However there may 686 be a nul before that if the keystroke translates to a nul character or 687 you paste a nul character. 688 */ event_length()689 static int event_length() {return e_length;} 690 691 static int compose(int &del); 692 static void compose_reset(); 693 static int event_inside(int,int,int,int); 694 static int event_inside(const Fl_Widget*); 695 static int test_shortcut(Fl_Shortcut); 696 697 // event destinations: 698 static int handle(int, Fl_Window*); 699 static int handle_(int, Fl_Window*); 700 /** Gets the widget that is below the mouse. 701 \see belowmouse(Fl_Widget*) */ belowmouse()702 static Fl_Widget* belowmouse() {return belowmouse_;} 703 static void belowmouse(Fl_Widget*); 704 /** Gets the widget that is being pushed. 705 \see void pushed(Fl_Widget*) */ pushed()706 static Fl_Widget* pushed() {return pushed_;} 707 static void pushed(Fl_Widget*); 708 /** Gets the current Fl::focus() widget. \sa Fl::focus(Fl_Widget*) */ focus()709 static Fl_Widget* focus() {return focus_;} 710 static void focus(Fl_Widget*); 711 static void add_handler(Fl_Event_Handler h); 712 static void remove_handler(Fl_Event_Handler h); 713 static void event_dispatch(Fl_Event_Dispatch d); 714 static Fl_Event_Dispatch event_dispatch(); 715 /** @} */ 716 717 /** \defgroup fl_clipboard Selection & Clipboard functions 718 FLTK global copy/cut/paste functions declared in <FL/Fl.H> 719 @{ */ 720 // cut/paste: 721 /** 722 Copies the data pointed to by \p stuff to the selection buffer 723 (\p destination is 0) or 724 the clipboard (\p destination is 1); \p len is the number of relevant 725 bytes in \p stuff. 726 The selection buffer is used for 727 middle-mouse pastes and for drag-and-drop selections. The 728 clipboard is used for traditional copy/cut/paste operations. 729 */ 730 static void copy(const char* stuff, int len, int destination = 0); // platform dependent 731 /** 732 Pastes the data from the selection buffer (\p source is 0) or the clipboard 733 (\p source is 1) into \p receiver. 734 Set things up so the receiver widget will be called with an FL_PASTE event some 735 time in the future with the data from the specified \p source in Fl::event_text() 736 and the number of characters in Fl::event_length(). 737 The receiver 738 should be prepared to be called \e directly by this, or for 739 it to happen \e later, or possibly <i>not at all</i>. This 740 allows the window system to take as long as necessary to retrieve 741 the paste buffer (or even to screw up completely) without complex 742 and error-prone synchronization code in FLTK. 743 744 The selection buffer is used for middle-mouse pastes and for 745 drag-and-drop selections. The clipboard is used for traditional 746 copy/cut/paste operations. 747 */ 748 static void paste(Fl_Widget &receiver, int source /*=0*/); // platform dependent 749 /** 750 Initiate a Drag And Drop operation. The selection buffer should be 751 filled with relevant data before calling this method. FLTK will 752 then initiate the system wide drag and drop handling. Dropped data 753 will be marked as <i>text</i>. 754 755 Create a selection first using: 756 Fl::copy(const char *stuff, int len, 0) 757 */ 758 static int dnd(); // platform dependent 759 760 // These are for back-compatibility only: 761 /** back-compatibility only: Gets the widget owning the current selection 762 \see Fl_Widget* selection_owner(Fl_Widget*) */ selection_owner()763 static Fl_Widget* selection_owner() {return selection_owner_;} 764 static void selection_owner(Fl_Widget*); 765 static void selection(Fl_Widget &owner, const char*, int len); 766 static void paste(Fl_Widget &receiver); 767 /** @} */ 768 /** \defgroup fl_screen Screen functions 769 fl global screen functions declared in <FL/Fl.H> 770 @{ */ 771 // screen size: 772 /** Returns the origin of the current screen work area, where 0 indicates the left side of the screen. */ 773 static int x(); // platform dependent 774 /** Returns the origin of the current screen work area, where 0 indicates the top edge of the screen. */ 775 static int y(); // platform dependent 776 /** Returns the width of the screen work area in pixels. */ 777 static int w(); // platform dependent 778 /** Returns the height of the screen work area in pixels. */ 779 static int h(); // platform dependent 780 781 // multi-head support: 782 static int screen_count(); 783 /** 784 Gets the bounding box of a screen that contains the mouse pointer. 785 \param[out] X,Y,W,H the corresponding screen bounding box 786 \see void screen_xywh(int &x, int &y, int &w, int &h, int mx, int my) 787 */ screen_xywh(int & X,int & Y,int & W,int & H)788 static void screen_xywh(int &X, int &Y, int &W, int &H) { 789 screen_xywh(X, Y, W, H, e_x_root, e_y_root); 790 } 791 static void screen_xywh(int &X, int &Y, int &W, int &H, int mx, int my); 792 static void screen_xywh(int &X, int &Y, int &W, int &H, int n); 793 static void screen_xywh(int &X, int &Y, int &W, int &H, int mx, int my, int mw, int mh); 794 static void screen_dpi(float &h, float &v, int n=0); 795 796 /** @} */ 797 798 /** \defgroup fl_attributes Color & Font functions 799 fl global color, font functions. 800 These functions are declared in <FL/Fl.H> or <FL/fl_draw.H>. 801 @{ */ 802 803 // color map: 804 static void set_color(Fl_Color, uchar, uchar, uchar); 805 /** 806 Sets an entry in the fl_color index table. You can set it to any 807 8-bit RGB color. The color is not allocated until fl_color(i) is used. 808 */ 809 static void set_color(Fl_Color i, unsigned c); // platform dependent 810 static unsigned get_color(Fl_Color i); 811 static void get_color(Fl_Color i, uchar &red, uchar &green, uchar &blue); 812 /** 813 Frees the specified color from the colormap, if applicable. 814 If overlay is non-zero then the color is freed from the 815 overlay colormap. 816 */ 817 static void free_color(Fl_Color i, int overlay = 0); // platform dependent 818 819 // fonts: 820 static const char* get_font(Fl_Font); 821 /** 822 Get a human-readable string describing the family of this face. This 823 is useful if you are presenting a choice to the user. There is no 824 guarantee that each face has a different name. The return value points 825 to a static buffer that is overwritten each call. 826 827 The integer pointed to by \p attributes (if the pointer is not 828 zero) is set to zero, FL_BOLD or FL_ITALIC or 829 FL_BOLD | FL_ITALIC. To locate a "family" of fonts, search 830 forward and back for a set with non-zero attributes, these faces along 831 with the face with a zero attribute before them constitute a family. 832 */ 833 static const char* get_font_name(Fl_Font, int* attributes = 0); 834 /** 835 Return an array of sizes in \p sizep. The return value is the 836 length of this array. The sizes are sorted from smallest to largest 837 and indicate what sizes can be given to fl_font() that will 838 be matched exactly (fl_font() will pick the closest size for 839 other sizes). A zero in the first location of the array indicates a 840 scalable font, where any size works, although the array may list sizes 841 that work "better" than others. Warning: the returned array 842 points at a static buffer that is overwritten each call. Under X this 843 will open the display. 844 */ 845 static int get_font_sizes(Fl_Font, int*& sizep); 846 static void set_font(Fl_Font, const char*); 847 static void set_font(Fl_Font, Fl_Font); 848 /** 849 FLTK will open the display, and add every fonts on the server to the 850 face table. It will attempt to put "families" of faces together, so 851 that the normal one is first, followed by bold, italic, and bold 852 italic. 853 854 The optional argument is a string to describe the set of fonts to 855 add. Passing NULL will select only fonts that have the 856 ISO8859-1 character set (and are thus usable by normal text). Passing 857 "-*" will select all fonts with any encoding as long as they have 858 normal X font names with dashes in them. Passing "*" will list every 859 font that exists (on X this may produce some strange output). Other 860 values may be useful but are system dependent. With WIN32 NULL 861 selects fonts with ISO8859-1 encoding and non-NULL selects 862 all fonts. 863 864 The return value is how many faces are in the table after this is done. 865 */ 866 static Fl_Font set_fonts(const char* = 0); // platform dependent 867 868 /** @} */ 869 /** \defgroup fl_drawings Drawing functions 870 FLTK global graphics and GUI drawing functions. 871 These functions are declared in <FL/fl_draw.H>, 872 and in <FL/x.H> for offscreen buffer-related ones. 873 @{ */ 874 // <Hack to re-order the 'Drawing functions' group> 875 /** @} */ 876 877 // labeltypes: 878 static void set_labeltype(Fl_Labeltype,Fl_Label_Draw_F*,Fl_Label_Measure_F*); 879 /** Sets the functions to call to draw and measure a specific labeltype. */ 880 static void set_labeltype(Fl_Labeltype, Fl_Labeltype from); // is it defined ? 881 882 // boxtypes: 883 static Fl_Box_Draw_F *get_boxtype(Fl_Boxtype); 884 static void set_boxtype(Fl_Boxtype, Fl_Box_Draw_F*,uchar,uchar,uchar,uchar); 885 static void set_boxtype(Fl_Boxtype, Fl_Boxtype from); 886 static int box_dx(Fl_Boxtype); 887 static int box_dy(Fl_Boxtype); 888 static int box_dw(Fl_Boxtype); 889 static int box_dh(Fl_Boxtype); 890 static int draw_box_active(); 891 892 // back compatibility: 893 /** \addtogroup fl_windows 894 @{ */ 895 /** For back compatibility, sets the void Fl::fatal handler callback */ set_abort(Fl_Abort_Handler f)896 static void set_abort(Fl_Abort_Handler f) {fatal = f;} 897 static void (*atclose)(Fl_Window*,void*); 898 static void default_atclose(Fl_Window*,void*); 899 /** For back compatibility, sets the Fl::atclose handler callback. You 900 can now simply change the callback for the window instead. 901 \see Fl_Window::callback(Fl_Callback*) */ set_atclose(Fl_Atclose_Handler f)902 static void set_atclose(Fl_Atclose_Handler f) {atclose = f;} 903 /** @} */ 904 905 /** \addtogroup fl_events 906 @{ */ 907 /** Returns non-zero if the Shift key is pressed. */ event_shift()908 static int event_shift() {return e_state&FL_SHIFT;} 909 /** Returns non-zero if the Control key is pressed. */ event_ctrl()910 static int event_ctrl() {return e_state&FL_CTRL;} 911 /** Returns non-zero if the FL_COMMAND key is pressed, either FL_CTRL or on OSX FL_META. */ event_command()912 static int event_command() {return e_state&FL_COMMAND;} 913 /** Returns non-zero if the Alt key is pressed. */ event_alt()914 static int event_alt() {return e_state&FL_ALT;} 915 /** 916 Returns the mouse buttons state bits; if non-zero, then at least one 917 button is pressed now. This function returns the button state at the 918 time of the event. During an FL_RELEASE event, the state 919 of the released button will be 0. To find out, which button 920 caused an FL_RELEASE event, you can use Fl::event_button() instead. 921 \return a bit mask value like { [FL_BUTTON1] | [FL_BUTTON2] | [FL_BUTTON3] } 922 */ event_buttons()923 static int event_buttons() {return e_state&0x7f000000;} 924 /** 925 Returns non-zero if mouse button 1 is currently held down. 926 For more details, see Fl::event_buttons(). 927 */ event_button1()928 static int event_button1() {return e_state&FL_BUTTON1;} 929 /** 930 Returns non-zero if button 2 is currently held down. 931 For more details, see Fl::event_buttons(). 932 */ event_button2()933 static int event_button2() {return e_state&FL_BUTTON2;} 934 /** 935 Returns non-zero if button 3 is currently held down. 936 For more details, see Fl::event_buttons(). 937 */ event_button3()938 static int event_button3() {return e_state&FL_BUTTON3;} 939 /** @} */ 940 941 /** 942 Sets an idle callback. 943 944 \deprecated This method is obsolete - use the add_idle() method instead. 945 */ set_idle(Fl_Old_Idle_Handler cb)946 static void set_idle(Fl_Old_Idle_Handler cb) {idle = cb;} 947 /** See grab(Fl_Window*) */ grab(Fl_Window & win)948 static void grab(Fl_Window& win) {grab(&win);} 949 /** Releases the current grabbed window, equals grab(0). 950 \deprecated Use Fl::grab(0) instead. 951 \see grab(Fl_Window*) */ release()952 static void release() {grab(0);} 953 954 // Visible focus methods... 955 /** 956 Gets or sets the visible keyboard focus on buttons and other 957 non-text widgets. The default mode is to enable keyboard focus 958 for all widgets. 959 */ visible_focus(int v)960 static void visible_focus(int v) { option(OPTION_VISIBLE_FOCUS, (v!=0)); } 961 /** 962 Gets or sets the visible keyboard focus on buttons and other 963 non-text widgets. The default mode is to enable keyboard focus 964 for all widgets. 965 */ visible_focus()966 static int visible_focus() { return option(OPTION_VISIBLE_FOCUS); } 967 968 // Drag-n-drop text operation methods... 969 /** 970 Gets or sets whether drag and drop text operations are supported. 971 This specifically affects whether selected text can 972 be dragged from text fields or dragged within a text field as a 973 cut/paste shortcut. 974 */ dnd_text_ops(int v)975 static void dnd_text_ops(int v) { option(OPTION_DND_TEXT, (v!=0)); } 976 /** 977 Gets or sets whether drag and drop text operations are 978 supported. This specifically affects whether selected text can 979 be dragged from text fields or dragged within a text field as a 980 cut/paste shortcut. 981 */ dnd_text_ops()982 static int dnd_text_ops() { return option(OPTION_DND_TEXT); } 983 /** \defgroup fl_multithread Multithreading support functions 984 fl multithreading support functions declared in <FL/Fl.H> 985 @{ */ 986 987 // Multithreading support: 988 static int lock(); 989 static void unlock(); 990 static void awake(void* message = 0); 991 /** See void awake(void* message=0). */ 992 static int awake(Fl_Awake_Handler cb, void* message = 0); 993 /** 994 The thread_message() method returns the last message 995 that was sent from a child by the awake() method. 996 997 See also: \ref advanced_multithreading 998 */ 999 static void* thread_message(); // platform dependent 1000 /** @} */ 1001 1002 /** \defgroup fl_del_widget Safe widget deletion support functions 1003 1004 These functions, declared in <FL/Fl.H>, support deletion of widgets inside callbacks. 1005 1006 Fl::delete_widget() should be called when deleting widgets 1007 or complete widget trees (Fl_Group, Fl_Window, ...) inside 1008 callbacks. 1009 1010 The other functions are intended for internal use. The preferred 1011 way to use them is by using the helper class Fl_Widget_Tracker. 1012 1013 The following is to show how it works ... 1014 1015 There are three groups of related methods: 1016 1017 -# scheduled widget deletion 1018 - Fl::delete_widget() schedules widgets for deletion 1019 - Fl::do_widget_deletion() deletes all scheduled widgets 1020 -# widget watch list ("smart pointers") 1021 - Fl::watch_widget_pointer() adds a widget pointer to the watch list 1022 - Fl::release_widget_pointer() removes a widget pointer from the watch list 1023 - Fl::clear_widget_pointer() clears a widget pointer \e in the watch list 1024 -# the class Fl_Widget_Tracker: 1025 - the constructor calls Fl::watch_widget_pointer() 1026 - the destructor calls Fl::release_widget_pointer() 1027 - the access methods can be used to test, if a widget has been deleted 1028 \see Fl_Widget_Tracker. 1029 1030 @{ */ 1031 // Widget deletion: 1032 static void delete_widget(Fl_Widget *w); 1033 static void do_widget_deletion(); 1034 static void watch_widget_pointer(Fl_Widget *&w); 1035 static void release_widget_pointer(Fl_Widget *&w); 1036 static void clear_widget_pointer(Fl_Widget const *w); 1037 /** @} */ 1038 1039 /** \defgroup group_cairo Cairo support functions and classes 1040 @{ 1041 */ 1042 public: 1043 1044 static cairo_surface_t * cairo_create_surface ( Window xid, int W, int H ); 1045 1046 // Cairo support API 1047 static cairo_t * cairo_make_current( cairo_t *cc ); 1048 /** when FLTK_HAVE_CAIRO is defined and cairo_autolink_context() is true, 1049 any current window dc is linked to a current context. 1050 This is not the default, because it may not be necessary 1051 to add cairo support to all fltk supported windows. 1052 When you wish to associate a cairo context in this mode, 1053 you need to call explicitly in your draw() overridden method, 1054 FL::cairo_make_current(Fl_Window*). This will create a cairo context 1055 but only for this Window. 1056 Still in custom cairo application it is possible to handle 1057 completely this process automatically by setting \p alink to true. 1058 In this last case, you don't need anymore to call Fl::cairo_make_current(). 1059 You can use Fl::cairo_cc() to get the current cairo context anytime. 1060 \note Only available when configure has the --enable-cairo option 1061 */ 1062 /** Gets the current cairo context linked with a fltk window. */ cairo_cc()1063 static cairo_t * cairo_cc() { return fl_cairo_context; } 1064 /** Sets the current cairo context to \p c. 1065 Set \p own to true if you want fltk to handle this cc deletion. 1066 \note Only available when configure has the --enable-cairo option 1067 */ 1068 // static void cairo_cc(cairo_t * c, bool own=false){ cairo_state_.cc(c, own); } 1069 1070 private: 1071 public: 1072 /** @} */ 1073 1074 }; 1075 1076 /** 1077 This class should be used to control safe widget deletion. 1078 1079 You can use an Fl_Widget_Tracker object to watch another widget, if you 1080 need to know, if this widget has been deleted during a callback. 1081 1082 This simplifies the use of the "safe widget deletion" methods 1083 Fl::watch_widget_pointer() and Fl::release_widget_pointer() and 1084 makes their use more reliable, because the destructor autmatically 1085 releases the widget pointer from the widget watch list. 1086 1087 It is intended to be used as an automatic (local/stack) variable, 1088 such that the automatic destructor is called when the object's 1089 scope is left. This ensures that no stale widget pointers are 1090 left in the widget watch list (see example below). 1091 1092 You can also create Fl_Widget_Tracker objects with \c new, but then it 1093 is your responsibility to delete the object (and thus remove the 1094 widget pointer from the watch list) when it is not needed any more. 1095 1096 Example: 1097 1098 \code 1099 int MyClass::handle (int event) { 1100 1101 if (...) { 1102 Fl_Widget_Tracker wp(this); // watch myself 1103 do_callback(); // call the callback 1104 1105 if (wp.deleted()) return 1; // exit, if deleted 1106 1107 // Now we are sure that the widget has not been deleted. 1108 // It is safe to access the widget 1109 1110 clear_changed(); // access the widget 1111 } 1112 } 1113 \endcode 1114 1115 */ 1116 class FL_EXPORT Fl_Widget_Tracker { 1117 1118 Fl_Widget* wp_; 1119 1120 public: 1121 1122 Fl_Widget_Tracker(Fl_Widget *wi); 1123 ~Fl_Widget_Tracker(); 1124 1125 /** 1126 Returns a pointer to the watched widget. 1127 1128 This pointer is \c NULL, if the widget has been deleted. 1129 */ widget()1130 Fl_Widget *widget() {return wp_;} 1131 1132 /** 1133 Returns 1, if the watched widget has been deleted. 1134 1135 This is a convenience method. You can also use something like 1136 1137 <tt> if (wp.widget() == 0) // ...</tt> 1138 1139 where \p wp is an Fl_Widget_Tracker object. 1140 */ deleted()1141 int deleted() {return wp_ == 0;} 1142 1143 /** 1144 Returns 1, if the watched widget exists (has not been deleted). 1145 1146 This is a convenience method. You can also use something like 1147 1148 <tt> if (wp.widget() != 0) // ...</tt> 1149 1150 where \p wp is an Fl_Widget_Tracker object. 1151 */ exists()1152 int exists() {return wp_ != 0;} 1153 1154 }; 1155 1156 /** \defgroup fl_unicode Unicode and UTF-8 functions 1157 fl global Unicode and UTF-8 handling functions declared in <FL/fl_utf8.h> 1158 @{ */ 1159 /** @} */ 1160 1161 /* 0 default, 1 off 2 on */ 1162 enum 1163 { 1164 FL_ANTIALIAS_DEFAULT, 1165 FL_ANTIALIAS_OFF, 1166 FL_ANTIALIAS_ON 1167 }; 1168 1169 void fl_set_antialias ( int v ); 1170 1171 #endif // !Fl_H 1172 1173 // 1174 // End of "$Id: Fl.H 8724 2011-05-23 18:01:29Z manolo $". 1175 // 1176