FLTK 1.3.2

- Main Page
- Related Pages
- Modules
- Classes
- Files

- File List
- File Members

Fl.H
Go to the documentation of this file.

    00001 //
    00002 // "$Id: Fl.H 9701 2012-10-18 12:56:31Z manolo $"
    00003 //
    00004 // Main header file for the Fast Light Tool Kit (FLTK).
    00005 //
    00006 // Copyright 1998-2010 by Bill Spitzak and others.
    00007 //
    00008 // This library is free software. Distribution and use rights are outlined in
    00009 // the file "COPYING" which should have been included with this file.  If this
    00010 // file is missing or damaged, see the license at:
    00011 //
    00012 //     http://www.fltk.org/COPYING.php
    00013 //
    00014 // Please report all bugs and problems on the following page:
    00015 //
    00016 //     http://www.fltk.org/str.php
    00017 //
    00018
    00023 #ifndef Fl_H
    00024 #  define Fl_H
    00025
    00026 #ifdef FLTK_HAVE_CAIRO
    00027 # include <FL/Fl_Cairo.H>
    00028 #endif
    00029
    00030 #  include "fl_utf8.h"
    00031 #  include "Enumerations.H"
    00032 #  ifndef Fl_Object
    00033 #    define Fl_Object Fl_Widget
    00034 #  endif
    00035
    00036 #  ifdef check
    00037 #    undef check
    00038 #  endif
    00039
    00040
    00041 class Fl_Widget;
    00042 class Fl_Window;
    00043 class Fl_Image;
    00044 struct Fl_Label;
    00045
    00046 // Keep avoiding having the socket deps at that level but mke sure it will work in both 32 & 64 bit builds
    00047 #if defined(WIN32) && !defined(__CYGWIN__)
    00048 # if defined(_WIN64)
    00049 #  define FL_SOCKET unsigned __int64
    00050 # else
    00051 #  define FL_SOCKET int
    00052 # endif
    00053 #else
    00054 # define FL_SOCKET int
    00055 #endif
    00056
    00073 typedef void (Fl_Label_Draw_F)(const Fl_Label *label, int x, int y, int w, int h, Fl_Align align);
    00074
    00076 typedef void (Fl_Label_Measure_F)(const Fl_Label *label, int &width, int &height);
    00077
    00079 typedef void (Fl_Box_Draw_F)(int x, int y, int w, int h, Fl_Color color);
    00080
    00082 typedef void (*Fl_Timeout_Handler)(void *data);
    00083
    00085 typedef void (*Fl_Awake_Handler)(void *data);
    00086
    00088 typedef void (*Fl_Idle_Handler)(void *data);
    00089
    00091 typedef void (*Fl_Old_Idle_Handler)();
    00092
    00094 typedef void (*Fl_FD_Handler)(FL_SOCKET fd, void *data);
    00095
    00097 typedef int (*Fl_Event_Handler)(int event);
    00098
    00100 typedef void (*Fl_Abort_Handler)(const char *format,...);
    00101
    00103 typedef void (*Fl_Atclose_Handler)(Fl_Window *window, void *data);
    00104
    00106 typedef int (*Fl_Args_Handler)(int argc, char **argv, int &i);
    00107
    00110 typedef int (*Fl_Event_Dispatch)(int event, Fl_Window *w);
    00111  /* group callback_functions */
    00113
    00114
    00119 class FL_EXPORT Fl {
    00120   Fl() {}; // no constructor!
    00121
    00122 public: // should be private!
    00123 #ifndef FL_DOXYGEN
    00124   static int e_number;
    00125   static int e_x;
    00126   static int e_y;
    00127   static int e_x_root;
    00128   static int e_y_root;
    00129   static int e_dx;
    00130   static int e_dy;
    00131   static int e_state;
    00132   static int e_clicks;
    00133   static int e_is_click;
    00134   static int e_keysym;
    00135   static char* e_text;
    00136   static int e_length;
    00137   static Fl_Event_Dispatch e_dispatch;
    00138   static Fl_Widget* belowmouse_;
    00139   static Fl_Widget* pushed_;
    00140   static Fl_Widget* focus_;
    00141   static int damage_;
    00142   static Fl_Widget* selection_owner_;
    00143   static Fl_Window* modal_;
    00144   static Fl_Window* grab_;
    00145   static int compose_state;
    00146   static void call_screen_init(); // recompute screen number and dimensions
    00147 #endif
    00148
    00151   static void damage(int d) {damage_ = d;}
    00152
    00153 public:
    00160   typedef enum {
    00165     OPTION_ARROW_FOCUS = 0,
    00166       // When switched on, FLTK will use the file chooser dialog that comes
    00167       // with your operating system whenever possible. When switched off, FLTK
    00168       // will present its own file chooser.
    00169       // \todo implement me
    00170     // OPTION_NATIVE_FILECHOOSER,
    00171       // When Filechooser Preview is enabled, the FLTK or native file chooser
    00172       // will show a preview of a selected file (if possible) before the user
    00173       // decides to choose the file.
    00174       // \todo implement me
    00175     //OPTION_FILECHOOSER_PREVIEW,
    00180     OPTION_VISIBLE_FOCUS,
    00184     OPTION_DND_TEXT,
    00188     OPTION_SHOW_TOOLTIPS,
    00189       // don't change this, leave it always as the last element
    00191     OPTION_LAST
    00192   } Fl_Option;
    00193
    00194 private:
    00195   static unsigned char options_[OPTION_LAST];
    00196   static unsigned char options_read_;
    00197
    00198 public:
    00199   /*
    00200    Return a global setting for all FLTK applications, possibly overridden
    00201    by a setting specifically for this application.
    00202    */
    00203   static bool option(Fl_Option opt);
    00204
    00205   /*
    00206    Override an option while the application is running.
    00207    */
    00208   static void option(Fl_Option opt, bool val);
    00209
    00217   static void (*idle)();
    00218
    00219 #ifndef FL_DOXYGEN
    00220   static Fl_Awake_Handler *awake_ring_;
    00221   static void **awake_data_;
    00222   static int awake_ring_size_;
    00223   static int awake_ring_head_;
    00224   static int awake_ring_tail_;
    00225   static const char* scheme_;
    00226   static Fl_Image* scheme_bg_;
    00227
    00228   static int e_original_keysym; // late addition
    00229   static int scrollbar_size_;
    00230 #endif
    00231
    00232
    00233   static int add_awake_handler_(Fl_Awake_Handler, void*);
    00234   static int get_awake_handler_(Fl_Awake_Handler&, void*&);
    00235
    00236 public:
    00237
    00238   // API version number
    00239   static double version();
    00240
    00241   // argument parsers:
    00242   static int arg(int argc, char **argv, int& i);
    00243   static int args(int argc, char **argv, int& i, Fl_Args_Handler cb = 0);
    00244   static void args(int argc, char **argv);
    00249   static const char* const help;
    00250
    00251   // things called by initialization:
    00252   static void display(const char*);
    00253   static int visual(int);
    00263   static int gl_visual(int, int *alist=0); // platform dependent
    00264   static void own_colormap();
    00265   static void get_system_colors();
    00266   static void foreground(uchar, uchar, uchar);
    00267   static void background(uchar, uchar, uchar);
    00268   static void background2(uchar, uchar, uchar);
    00269
    00270   // schemes:
    00271   static int scheme(const char*);
    00273   static const char* scheme() {return scheme_;}
    00279   static int reload_scheme(); // platform dependent
    00280   static int scrollbar_size();
    00281   static void scrollbar_size(int W);
    00282
    00283   // execution:
    00284   static int wait();
    00285   static double wait(double time);
    00286   static int check();
    00287   static int ready();
    00288   static int run();
    00289   static Fl_Widget* readqueue();
    00316   static void add_timeout(double t, Fl_Timeout_Handler,void* = 0); // platform dependent
    00337   static void repeat_timeout(double t, Fl_Timeout_Handler, void* = 0); // platform dependent
    00338   static int  has_timeout(Fl_Timeout_Handler, void* = 0);
    00339   static void remove_timeout(Fl_Timeout_Handler, void* = 0);
    00340   static void add_check(Fl_Timeout_Handler, void* = 0);
    00341   static int  has_check(Fl_Timeout_Handler, void* = 0);
    00342   static void remove_check(Fl_Timeout_Handler, void* = 0);
    00362   static void add_fd(int fd, int when, Fl_FD_Handler cb, void* = 0); // platform dependent
    00364   static void add_fd(int fd, Fl_FD_Handler cb, void* = 0); // platform dependent
    00366   static void remove_fd(int, int when); // platform dependent
    00368   static void remove_fd(int); // platform dependent
    00369
    00370   static void add_idle(Fl_Idle_Handler cb, void* data = 0);
    00371   static int  has_idle(Fl_Idle_Handler cb, void* data = 0);
    00372   static void remove_idle(Fl_Idle_Handler cb, void* data = 0);
    00374   static int damage() {return damage_;}
    00375   static void redraw();
    00376   static void flush();
    00397   static void (*warning)(const char*, ...);
    00412   static void (*error)(const char*, ...);
    00429   static void (*fatal)(const char*, ...);
    00435   static Fl_Window* first_window();
    00436   static void first_window(Fl_Window*);
    00437   static Fl_Window* next_window(const Fl_Window*);
    00438
    00448   static Fl_Window* modal() {return modal_;}
    00454   static Fl_Window* grab() {return grab_;}
    00479   static void grab(Fl_Window*); // platform dependent
    00486   // event information:
    00492   static int event()            {return e_number;}
    00497   static int event_x()  {return e_x;}
    00502   static int event_y()  {return e_y;}
    00509   static int event_x_root()     {return e_x_root;}
    00516   static int event_y_root()     {return e_y_root;}
    00521   static int event_dx() {return e_dx;}
    00526   static int event_dy() {return e_dy;}
    00535   static void get_mouse(int &,int &); // platform dependent
    00544   static int event_clicks()     {return e_clicks;}
    00552   static void event_clicks(int i) {e_clicks = i;}
    00560   static int event_is_click()   {return e_is_click;}
    00567   static void event_is_click(int i) {e_is_click = i;}
    00574   static int event_button()     {return e_keysym-FL_Button;}
    00598   static int event_state()      {return e_state;}
    00600   static int event_state(int i) {return e_state&i;}
    00612   static int event_key()        {return e_keysym;}
    00621   static int event_original_key(){return e_original_keysym;}
    00660   static int event_key(int key);
    00666   static int get_key(int key); // platform dependent
    00681   static const char* event_text() {return e_text;}
    00688   static int event_length() {return e_length;}
    00689
    00690   static int compose(int &del);
    00691   static void compose_reset();
    00692   static int event_inside(int,int,int,int);
    00693   static int event_inside(const Fl_Widget*);
    00694   static int test_shortcut(Fl_Shortcut);
    00695
    00696   // event destinations:
    00697   static int handle(int, Fl_Window*);
    00698   static int handle_(int, Fl_Window*);
    00701   static Fl_Widget* belowmouse() {return belowmouse_;}
    00702   static void belowmouse(Fl_Widget*);
    00705   static Fl_Widget* pushed()    {return pushed_;}
    00706   static void pushed(Fl_Widget*);
    00708   static Fl_Widget* focus()     {return focus_;}
    00709   static void focus(Fl_Widget*);
    00710   static void add_handler(Fl_Event_Handler h);
    00711   static void remove_handler(Fl_Event_Handler h);
    00712   static void event_dispatch(Fl_Event_Dispatch d);
    00713   static Fl_Event_Dispatch event_dispatch();
    00719   // cut/paste:
    00729   static void copy(const char* stuff, int len, int destination = 0); // platform dependent
    00747   static void paste(Fl_Widget &receiver, int source /*=0*/); // platform dependent
    00757   static int dnd(); // platform dependent
    00758
    00759   // These are for back-compatibility only:
    00762   static Fl_Widget* selection_owner() {return selection_owner_;}
    00763   static void selection_owner(Fl_Widget*);
    00764   static void selection(Fl_Widget &owner, const char*, int len);
    00765   static void paste(Fl_Widget &receiver);
    00770   // screen size:
    00772   static int x(); // platform dependent
    00774   static int y(); // platform dependent
    00776   static int w(); // platform dependent
    00778   static int h(); // platform dependent
    00779
    00780   // multi-head support:
    00781   static int screen_count();
    00787   static void screen_xywh(int &X, int &Y, int &W, int &H) {
    00788     int x, y;
    00789     Fl::get_mouse(x, y);
    00790     screen_xywh(X, Y, W, H, x, y);
    00791   }
    00792   static void screen_xywh(int &X, int &Y, int &W, int &H, int mx, int my);
    00793   static void screen_xywh(int &X, int &Y, int &W, int &H, int n);
    00794   static void screen_xywh(int &X, int &Y, int &W, int &H, int mx, int my, int mw, int mh);
    00795   static void screen_dpi(float &h, float &v, int n=0);
    00796   static void screen_work_area(int &X, int &Y, int &W, int &H, int mx, int my);
    00797   static void screen_work_area(int &X, int &Y, int &W, int &H, int n);
    00803   static void screen_work_area(int &X, int &Y, int &W, int &H) {
    00804     int x, y;
    00805     Fl::get_mouse(x, y);
    00806     screen_work_area(X, Y, W, H, x, y);
    00807   }
    00808
    00816   // color map:
    00817   static void   set_color(Fl_Color, uchar, uchar, uchar);
    00822   static void   set_color(Fl_Color i, unsigned c); // platform dependent
    00823   static unsigned get_color(Fl_Color i);
    00824   static void   get_color(Fl_Color i, uchar &red, uchar &green, uchar &blue);
    00830   static void   free_color(Fl_Color i, int overlay = 0); // platform dependent
    00831
    00832   // fonts:
    00833   static const char* get_font(Fl_Font);
    00846   static const char* get_font_name(Fl_Font, int* attributes = 0);
    00858   static int get_font_sizes(Fl_Font, int*& sizep);
    00859   static void set_font(Fl_Font, const char*);
    00860   static void set_font(Fl_Font, Fl_Font);
    00879   static Fl_Font set_fonts(const char* = 0); // platform dependent
    00880
    00887   // <Hack to re-order the 'Drawing functions' group>
    00890   // labeltypes:
    00891   static void set_labeltype(Fl_Labeltype,Fl_Label_Draw_F*,Fl_Label_Measure_F*);
    00893   static void set_labeltype(Fl_Labeltype, Fl_Labeltype from); // is it defined ?
    00894
    00895   // boxtypes:
    00896   static Fl_Box_Draw_F *get_boxtype(Fl_Boxtype);
    00897   static void set_boxtype(Fl_Boxtype, Fl_Box_Draw_F*,uchar,uchar,uchar,uchar);
    00898   static void set_boxtype(Fl_Boxtype, Fl_Boxtype from);
    00899   static int box_dx(Fl_Boxtype);
    00900   static int box_dy(Fl_Boxtype);
    00901   static int box_dw(Fl_Boxtype);
    00902   static int box_dh(Fl_Boxtype);
    00903   static int draw_box_active();
    00904
    00905   // back compatibility:
    00909   static void set_abort(Fl_Abort_Handler f) {fatal = f;}
    00910   static void (*atclose)(Fl_Window*,void*);
    00911   static void default_atclose(Fl_Window*,void*);
    00915   static void set_atclose(Fl_Atclose_Handler f) {atclose = f;}
    00921   static int event_shift() {return e_state&FL_SHIFT;}
    00923   static int event_ctrl() {return e_state&FL_CTRL;}
    00925   static int event_command() {return e_state&FL_COMMAND;}
    00927   static int event_alt() {return e_state&FL_ALT;}
    00936   static int event_buttons() {return e_state&0x7f000000;}
    00941   static int event_button1() {return e_state&FL_BUTTON1;}
    00946   static int event_button2() {return e_state&FL_BUTTON2;}
    00951   static int event_button3() {return e_state&FL_BUTTON3;}
    00959   static void set_idle(Fl_Old_Idle_Handler cb) {idle = cb;}
    00961   static void grab(Fl_Window& win) {grab(&win);}
    00965   static void release() {grab(0);}
    00966
    00967   // Visible focus methods...
    00973   static void visible_focus(int v) { option(OPTION_VISIBLE_FOCUS, (v!=0)); }
    00979   static int  visible_focus() { return option(OPTION_VISIBLE_FOCUS); }
    00980
    00981   // Drag-n-drop text operation methods...
    00988   static void dnd_text_ops(int v) { option(OPTION_DND_TEXT, (v!=0)); }
    00995   static int  dnd_text_ops() { return option(OPTION_DND_TEXT); }
    01000   // Multithreading support:
    01001   static int lock();
    01002   static void unlock();
    01003   static void awake(void* message = 0);
    01005   static int awake(Fl_Awake_Handler cb, void* message = 0);
    01012   static void* thread_message(); // platform dependent
    01044   // Widget deletion:
    01045   static void delete_widget(Fl_Widget *w);
    01046   static void do_widget_deletion();
    01047   static void watch_widget_pointer(Fl_Widget *&w);
    01048   static void release_widget_pointer(Fl_Widget *&w);
    01049   static void clear_widget_pointer(Fl_Widget const *w);
    01052 #ifdef FLTK_HAVE_CAIRO
    01053
    01056 public:
    01057   // Cairo support API
    01058   static cairo_t * cairo_make_current(Fl_Window* w);
    01073   static void cairo_autolink_context(bool alink) {cairo_state_.autolink(alink);}
    01081   static bool cairo_autolink_context() {return cairo_state_.autolink();}
    01083   static cairo_t * cairo_cc() { return cairo_state_.cc(); }
    01088   static void cairo_cc(cairo_t * c, bool own=false){ cairo_state_.cc(c, own); }
    01089
    01090 private:
    01091   static cairo_t * cairo_make_current(void* gc);
    01092   static cairo_t * cairo_make_current(void* gc, int W, int H);
    01093   static Fl_Cairo_State cairo_state_;
    01094 public:
    01097 #endif // FLTK_HAVE_CAIRO
    01098
    01099 };
    01100
    01141 class FL_EXPORT Fl_Widget_Tracker {
    01142
    01143   Fl_Widget* wp_;
    01144
    01145 public:
    01146
    01147   Fl_Widget_Tracker(Fl_Widget *wi);
    01148   ~Fl_Widget_Tracker();
    01149
    01155   Fl_Widget *widget() {return wp_;}
    01156
    01166   int deleted() {return wp_ == 0;}
    01167
    01177   int exists()  {return wp_ != 0;}
    01178
    01179 };
    01180
    01186 #endif // !Fl_H
    01187
    01188 //
    01189 // End of "$Id: Fl.H 9701 2012-10-18 12:56:31Z manolo $".
    01190 //