From 793fa5a91f24358aa7ce21abf6ee4e93a17b04ee Mon Sep 17 00:00:00 2001 From: maxim nikonov Date: Fri, 6 Feb 2026 19:04:24 +0500 Subject: wip --- FL/Fl.H | 371 ++++++++++++++++++++++++++----------------------- FL/Fl_Widget_Tracker.H | 55 +------- FL/core/events.H | 188 +++++++++++-------------- FL/core/options.H | 31 ++--- 4 files changed, 298 insertions(+), 347 deletions(-) (limited to 'FL') diff --git a/FL/Fl.H b/FL/Fl.H index 3a9b4bc1d..2f449e8f7 100644 --- a/FL/Fl.H +++ b/FL/Fl.H @@ -15,7 +15,7 @@ // /** \file FL/Fl.H - \brief Fl namespace. + \brief Fl class. */ #ifndef Fl_H @@ -26,10 +26,8 @@ #include // for FL_SOCKET #include // type casting #include // widget callbacks and services -#include // global event handling -#include // system and application setting #include // pen and tablet events -#include // historically included here +#include // widget deletion tracking #if FLTK_HAVE_CAIRO # include @@ -68,53 +66,60 @@ extern FL_EXPORT const char* fl_local_shift; ///< string pointer used in shortcu /** - Fl is the FLTK global namespace containing state information and global + Fl is the FLTK global class containing state information and global methods for the current application. */ -namespace Fl { +class FL_EXPORT Fl { +public: -FL_EXPORT extern Fl_Screen_Driver *screen_driver(); -FL_EXPORT extern Fl_System_Driver *system_driver(); +// Event handling (from FL/core/events.H) +#include -FL_EXPORT extern int box_shadow_width(); -FL_EXPORT extern void box_shadow_width(int W); +// Options (from FL/core/options.H) +#include -FL_EXPORT extern int box_border_radius_max(); -FL_EXPORT extern void box_border_radius_max(int R); +static FL_EXPORT Fl_Screen_Driver *screen_driver(); +static FL_EXPORT Fl_System_Driver *system_driver(); + +static FL_EXPORT int box_shadow_width(); +static FL_EXPORT void box_shadow_width(int W); + +static FL_EXPORT int box_border_radius_max(); +static FL_EXPORT void box_border_radius_max(int R); // should be private: #ifndef FL_DOXYGEN -FL_EXPORT extern int damage_; -FL_EXPORT extern Fl_Widget* selection_owner_; -FL_EXPORT extern Fl_Window* modal_; -FL_EXPORT extern Fl_Window* grab_; -FL_EXPORT extern int compose_state; // used for dead keys (Windows) or marked text (MacOS) -FL_EXPORT extern void call_screen_init(); // recompute screen number and dimensions +static FL_EXPORT int damage_; +static FL_EXPORT Fl_Widget* selection_owner_; +static FL_EXPORT Fl_Window* modal_; +static FL_EXPORT Fl_Window* grab_; +static FL_EXPORT int compose_state; // used for dead keys (Windows) or marked text (MacOS) +static FL_EXPORT void call_screen_init(); // recompute screen number and dimensions #endif // FL_DOXYGEN /** If true then flush() will do something. */ -FL_EXPORT inline void damage(int d) {damage_ = d;} +static FL_EXPORT inline void damage(int d) {damage_ = d;} -FL_EXPORT extern bool idle(); +static FL_EXPORT bool idle(); #ifndef FL_DOXYGEN -FL_EXPORT extern const char* scheme_; -FL_EXPORT extern Fl_Image* scheme_bg_; +static FL_EXPORT const char* scheme_; +static FL_EXPORT Fl_Image* scheme_bg_; -FL_EXPORT extern int scrollbar_size_; -FL_EXPORT extern int menu_linespacing_; // STR #2927 +static FL_EXPORT int scrollbar_size_; +static FL_EXPORT int menu_linespacing_; // STR #2927 #endif // API version number -FL_EXPORT extern double version(); -FL_EXPORT extern int api_version(); +static FL_EXPORT double version(); +static FL_EXPORT int api_version(); // ABI version number -FL_EXPORT extern int abi_version(); +static FL_EXPORT int abi_version(); /** Returns whether the runtime library ABI version is correct. @@ -138,24 +143,24 @@ FL_EXPORT extern int abi_version(); \see Fl::abi_version() */ -FL_EXPORT inline int abi_check(const int val = FL_ABI_VERSION) { +static FL_EXPORT inline int abi_check(const int val = FL_ABI_VERSION) { return val == abi_version(); } // argument parsers: -FL_EXPORT extern int arg(int argc, char **argv, int& i); -FL_EXPORT extern int args(int argc, char **argv, int& i, Fl_Args_Handler cb = 0); -FL_EXPORT extern void args(int argc, char **argv); +static FL_EXPORT int arg(int argc, char **argv, int& i); +static FL_EXPORT int args(int argc, char **argv, int& i, Fl_Args_Handler cb = 0); +static FL_EXPORT void args(int argc, char **argv); /** Usage string displayed if Fl::args() detects an invalid argument. This may be changed to point to customized text at run-time. */ -FL_EXPORT extern const char* const help; +static FL_EXPORT const char* const help; // things called by initialization: -FL_EXPORT extern void display(const char*); -FL_EXPORT extern int visual(int); +static FL_EXPORT void display(const char*); +static FL_EXPORT int visual(int); /** This does the same thing as Fl::visual(int) but also requires OpenGL @@ -166,17 +171,17 @@ FL_EXPORT extern int visual(int); See Fl_Gl_Window for a list of additional values for the argument. */ -FL_EXPORT extern int gl_visual(int, int *alist=0); // platform dependent -FL_EXPORT extern void own_colormap(); -FL_EXPORT extern void get_system_colors(); -FL_EXPORT extern void foreground(uchar, uchar, uchar); -FL_EXPORT extern void background(uchar, uchar, uchar); -FL_EXPORT extern void background2(uchar, uchar, uchar); +static FL_EXPORT int gl_visual(int, int *alist=0); // platform dependent +static FL_EXPORT void own_colormap(); +static FL_EXPORT void get_system_colors(); +static FL_EXPORT void foreground(uchar, uchar, uchar); +static FL_EXPORT void background(uchar, uchar, uchar); +static FL_EXPORT void background2(uchar, uchar, uchar); // schemes: -FL_EXPORT extern int scheme(const char *name); +static FL_EXPORT int scheme(const char *name); /** See void scheme(const char *name) */ -FL_EXPORT inline const char* scheme() {return scheme_;} +static FL_EXPORT inline const char* scheme() {return scheme_;} /** Returns whether the current scheme is the given name. @@ -205,64 +210,64 @@ FL_EXPORT inline const char* scheme() {return scheme_;} \see Fl::scheme(const char *name) */ -FL_EXPORT inline int is_scheme(const char *name) { +static FL_EXPORT inline int is_scheme(const char *name) { return (scheme_ && name && !strcmp(name,scheme_)); } -FL_EXPORT extern int reload_scheme(); // defined in 'src/Fl_get_system_colors.cxx' +static FL_EXPORT int reload_scheme(); // defined in 'src/Fl_get_system_colors.cxx' -FL_EXPORT extern int scrollbar_size(); -FL_EXPORT extern void scrollbar_size(int W); -FL_EXPORT extern int menu_linespacing(); -FL_EXPORT extern void menu_linespacing(int H); +static FL_EXPORT int scrollbar_size(); +static FL_EXPORT void scrollbar_size(int W); +static FL_EXPORT int menu_linespacing(); +static FL_EXPORT void menu_linespacing(int H); // execution: -FL_EXPORT extern int wait(); -FL_EXPORT extern double wait(double time); -FL_EXPORT extern int check(); -FL_EXPORT extern int ready(); -FL_EXPORT extern int run(); -FL_EXPORT extern int program_should_quit(); -FL_EXPORT extern void program_should_quit(int should_i); -FL_EXPORT extern void hide_all_windows(); +static FL_EXPORT int wait(); +static FL_EXPORT double wait(double time); +static FL_EXPORT int check(); +static FL_EXPORT int ready(); +static FL_EXPORT int run(); +static FL_EXPORT int program_should_quit(); +static FL_EXPORT void program_should_quit(int should_i); +static FL_EXPORT void hide_all_windows(); -FL_EXPORT extern Fl_Widget* readqueue(); +static FL_EXPORT Fl_Widget* readqueue(); // // cross-platform timer support // -FL_EXPORT extern void add_timeout(double t, Fl_Timeout_Handler cb, void *data = 0); -FL_EXPORT extern void repeat_timeout(double t, Fl_Timeout_Handler cb, void *data = 0); -FL_EXPORT extern int has_timeout(Fl_Timeout_Handler cb, void *data = 0); -FL_EXPORT extern void remove_timeout(Fl_Timeout_Handler cb, void *data = 0); -FL_EXPORT extern int remove_next_timeout(Fl_Timeout_Handler cb, void *data = 0, void **data_return = 0); +static FL_EXPORT void add_timeout(double t, Fl_Timeout_Handler cb, void *data = 0); +static FL_EXPORT void repeat_timeout(double t, Fl_Timeout_Handler cb, void *data = 0); +static FL_EXPORT int has_timeout(Fl_Timeout_Handler cb, void *data = 0); +static FL_EXPORT void remove_timeout(Fl_Timeout_Handler cb, void *data = 0); +static FL_EXPORT int remove_next_timeout(Fl_Timeout_Handler cb, void *data = 0, void **data_return = 0); -FL_EXPORT extern void add_check(Fl_Timeout_Handler, void* = 0); -FL_EXPORT extern int has_check(Fl_Timeout_Handler, void* = 0); -FL_EXPORT extern void remove_check(Fl_Timeout_Handler, void* = 0); +static FL_EXPORT void add_check(Fl_Timeout_Handler, void* = 0); +static FL_EXPORT int has_check(Fl_Timeout_Handler, void* = 0); +static FL_EXPORT void remove_check(Fl_Timeout_Handler, void* = 0); -FL_EXPORT extern Fl_Timestamp now(double offset = 0); -FL_EXPORT extern double seconds_since(Fl_Timestamp& then); -FL_EXPORT extern double seconds_between(Fl_Timestamp& back, Fl_Timestamp& further_back); -FL_EXPORT extern long ticks_since(Fl_Timestamp& then); -FL_EXPORT extern long ticks_between(Fl_Timestamp& back, Fl_Timestamp& further_back); +static FL_EXPORT Fl_Timestamp now(double offset = 0); +static FL_EXPORT double seconds_since(Fl_Timestamp& then); +static FL_EXPORT double seconds_between(Fl_Timestamp& back, Fl_Timestamp& further_back); +static FL_EXPORT long ticks_since(Fl_Timestamp& then); +static FL_EXPORT long ticks_between(Fl_Timestamp& back, Fl_Timestamp& further_back); -FL_EXPORT extern void add_fd(int fd, int when, Fl_FD_Handler cb, void* = 0); // platform dependent -FL_EXPORT extern void add_fd(int fd, Fl_FD_Handler cb, void* = 0); // platform dependent +static FL_EXPORT void add_fd(int fd, int when, Fl_FD_Handler cb, void* = 0); // platform dependent +static FL_EXPORT void add_fd(int fd, Fl_FD_Handler cb, void* = 0); // platform dependent /** Removes a file descriptor handler. */ -FL_EXPORT extern void remove_fd(int, int when); // platform dependent +static FL_EXPORT void remove_fd(int, int when); // platform dependent /** Removes a file descriptor handler. */ -FL_EXPORT extern void remove_fd(int); // platform dependent +static FL_EXPORT void remove_fd(int); // platform dependent -FL_EXPORT extern void add_idle(Fl_Idle_Handler cb, void* data = 0); -FL_EXPORT extern int has_idle(Fl_Idle_Handler cb, void* data = 0); -FL_EXPORT extern void remove_idle(Fl_Idle_Handler cb, void* data = 0); -FL_EXPORT extern void add_idle(Fl_Old_Idle_Handler cb); +static FL_EXPORT void add_idle(Fl_Idle_Handler cb, void* data = 0); +static FL_EXPORT int has_idle(Fl_Idle_Handler cb, void* data = 0); +static FL_EXPORT void remove_idle(Fl_Idle_Handler cb, void* data = 0); +static FL_EXPORT void add_idle(Fl_Old_Idle_Handler cb); /** If true then flush() will do something. */ -FL_EXPORT inline int damage() {return damage_;} -FL_EXPORT extern void redraw(); -FL_EXPORT extern void flush(); +static FL_EXPORT inline int damage() {return damage_;} +static FL_EXPORT void redraw(); +static FL_EXPORT void flush(); /** \addtogroup group_comdlg @{ */ @@ -285,7 +290,7 @@ FL_EXPORT extern void flush(); displaying the message. \note \#include */ -FL_EXPORT extern void (*warning)(const char*, ...); +static FL_EXPORT void (*warning)(const char*, ...); /** FLTK calls Fl::error() to output a normal error message. @@ -301,7 +306,7 @@ FL_EXPORT extern void (*warning)(const char*, ...); an image file. The default implementation returns after displaying the message. \note \#include */ -FL_EXPORT extern void (*error)(const char*, ...); +static FL_EXPORT void (*error)(const char*, ...); /** FLTK calls Fl::fatal() to output a fatal error message. @@ -319,7 +324,7 @@ FL_EXPORT extern void (*error)(const char*, ...); after displaying the message. \note \#include */ -FL_EXPORT extern void (*fatal)(const char*, ...); +static FL_EXPORT void (*fatal)(const char*, ...); /** @} */ @@ -327,9 +332,9 @@ FL_EXPORT extern void (*fatal)(const char*, ...); \brief Windows and standard dialogs handling declared in @{ */ -FL_EXPORT extern Fl_Window* first_window(); -FL_EXPORT extern void first_window(Fl_Window*); -FL_EXPORT extern Fl_Window* next_window(const Fl_Window*); +static FL_EXPORT Fl_Window* first_window(); +static FL_EXPORT void first_window(Fl_Window*); +static FL_EXPORT Fl_Window* next_window(const Fl_Window*); /** Returns the top-most modal() window currently shown. @@ -340,14 +345,14 @@ FL_EXPORT extern Fl_Window* next_window(const Fl_Window*); for all events, and no other windows will have handle() called (grab() s this). */ -FL_EXPORT inline Fl_Window* modal() {return modal_;} +static FL_EXPORT inline Fl_Window* modal() {return modal_;} /** Returns the window that currently receives all events. \return The window that currently receives all events, or NULL if event grabbing is currently OFF. */ -FL_EXPORT inline Fl_Window* grab() {return grab_;} +static FL_EXPORT inline Fl_Window* grab() {return grab_;} /** Selects the window to grab. This is used when pop-up menu systems are active. @@ -373,7 +378,7 @@ FL_EXPORT inline Fl_Window* grab() {return grab_;} limit mouse pointer grabbing to the time during which a mouse button is held down. Some OS's may not support grabbing at all. */ -FL_EXPORT extern void grab(Fl_Window*); // platform dependent +static FL_EXPORT void grab(Fl_Window*); // platform dependent /** @} */ @@ -420,11 +425,11 @@ FL_EXPORT extern void grab(Fl_Window*); // platform dependent Fl::screen_driver()->copy(stuff, len, clipboard, type); \endcode */ -FL_EXPORT extern void copy(const char *stuff, int len, int destination = 0, +static FL_EXPORT void copy(const char *stuff, int len, int destination = 0, const char *type = Fl::clipboard_plain_text); -FL_EXPORT extern void selection_to_clipboard(int mode); -FL_EXPORT extern int selection_to_clipboard(); +static FL_EXPORT void selection_to_clipboard(int mode); +static FL_EXPORT int selection_to_clipboard(); /** Pastes the data from the selection buffer (\p source is 0) or the clipboard @@ -468,7 +473,7 @@ FL_EXPORT extern int selection_to_clipboard(); \li Mac OS X platform: Both bitmap (TIFF) and vectorial (PDF) data from clipboard can be pasted as image data. */ -FL_EXPORT extern void paste(Fl_Widget &receiver, int source, const char *type = Fl::clipboard_plain_text); +static FL_EXPORT void paste(Fl_Widget &receiver, int source, const char *type = Fl::clipboard_plain_text); /** FLTK will call the registered callback whenever there is a change to the @@ -491,13 +496,13 @@ FL_EXPORT extern void paste(Fl_Widget &receiver, int source, const char *type = \note Some systems require polling to monitor the clipboard and may therefore have some delay in detecting changes. */ -FL_EXPORT extern void add_clipboard_notify(Fl_Clipboard_Notify_Handler h, void *data = 0); +static FL_EXPORT void add_clipboard_notify(Fl_Clipboard_Notify_Handler h, void *data = 0); /** Stop calling the specified callback when there are changes to the selection buffer or the clipboard. */ -FL_EXPORT extern void remove_clipboard_notify(Fl_Clipboard_Notify_Handler h); +static FL_EXPORT void remove_clipboard_notify(Fl_Clipboard_Notify_Handler h); /** Returns non 0 if the clipboard contains data matching \p type. The clipboard can contain both text and image data; in that situation this function @@ -507,7 +512,7 @@ FL_EXPORT extern void remove_clipboard_notify(Fl_Clipboard_Notify_Handler h); allows to copy/paste non-textual data only from/to the clipboard. \param type can be Fl::clipboard_plain_text or Fl::clipboard_image. */ -FL_EXPORT extern int clipboard_contains(const char *type); +static FL_EXPORT int clipboard_contains(const char *type); /** Initiate a Drag And Drop operation. The selection buffer should be @@ -518,15 +523,15 @@ FL_EXPORT extern int clipboard_contains(const char *type); Create a selection first using: Fl::copy(const char *stuff, int len, 0) */ -FL_EXPORT extern int dnd(); // platform dependent +static FL_EXPORT int dnd(); // platform dependent // These are for back-compatibility only: /** back-compatibility only: Gets the widget owning the current selection \see Fl_Widget* selection_owner(Fl_Widget*) */ -FL_EXPORT inline Fl_Widget* selection_owner() {return selection_owner_;} -FL_EXPORT extern void selection_owner(Fl_Widget*); -FL_EXPORT extern void selection(Fl_Widget &owner, const char*, int len); -FL_EXPORT extern void paste(Fl_Widget &receiver); +static FL_EXPORT inline Fl_Widget* selection_owner() {return selection_owner_;} +static FL_EXPORT void selection_owner(Fl_Widget*); +static FL_EXPORT void selection(Fl_Widget &owner, const char*, int len); +static FL_EXPORT void paste(Fl_Widget &receiver); /** @} */ @@ -545,27 +550,27 @@ FL_EXPORT extern void paste(Fl_Widget &receiver); See \ref events_fl_shortcut for more details about these shortcuts. @{ */ -FL_EXPORT extern int x(); // via screen driver -FL_EXPORT extern int y(); // via screen driver -FL_EXPORT extern int w(); // via screen driver -FL_EXPORT extern int h(); // via screen driver +static FL_EXPORT int x(); // via screen driver +static FL_EXPORT int y(); // via screen driver +static FL_EXPORT int w(); // via screen driver +static FL_EXPORT int h(); // via screen driver // multi-head support: -FL_EXPORT extern int screen_count(); // via screen driver -FL_EXPORT extern void screen_xywh(int &X, int &Y, int &W, int &H); // via screen driver -FL_EXPORT extern void screen_xywh(int &X, int &Y, int &W, int &H, int mx, int my); // via screen driver -FL_EXPORT extern void screen_xywh(int &X, int &Y, int &W, int &H, int n); // via screen driver -FL_EXPORT extern void screen_xywh(int &X, int &Y, int &W, int &H, int mx, int my, int mw, int mh); // via screen driver -FL_EXPORT extern int screen_num(int x, int y); // via screen driver -FL_EXPORT extern int screen_num(int x, int y, int w, int h); // via screen driver -FL_EXPORT extern void screen_dpi(float &h, float &v, int n=0); // via screen driver -FL_EXPORT extern void screen_work_area(int &X, int &Y, int &W, int &H, int mx, int my); // via screen driver -FL_EXPORT extern void screen_work_area(int &X, int &Y, int &W, int &H, int n); // via screen driver -FL_EXPORT extern void screen_work_area(int &X, int &Y, int &W, int &H); // via screen driver -FL_EXPORT extern float screen_scale(int n); // via screen driver -FL_EXPORT extern void screen_scale(int n, float factor); // via screen driver -FL_EXPORT extern int screen_scaling_supported(); -FL_EXPORT extern void keyboard_screen_scaling(int value); +static FL_EXPORT int screen_count(); // via screen driver +static FL_EXPORT void screen_xywh(int &X, int &Y, int &W, int &H); // via screen driver +static FL_EXPORT void screen_xywh(int &X, int &Y, int &W, int &H, int mx, int my); // via screen driver +static FL_EXPORT void screen_xywh(int &X, int &Y, int &W, int &H, int n); // via screen driver +static FL_EXPORT void screen_xywh(int &X, int &Y, int &W, int &H, int mx, int my, int mw, int mh); // via screen driver +static FL_EXPORT int screen_num(int x, int y); // via screen driver +static FL_EXPORT int screen_num(int x, int y, int w, int h); // via screen driver +static FL_EXPORT void screen_dpi(float &h, float &v, int n=0); // via screen driver +static FL_EXPORT void screen_work_area(int &X, int &Y, int &W, int &H, int mx, int my); // via screen driver +static FL_EXPORT void screen_work_area(int &X, int &Y, int &W, int &H, int n); // via screen driver +static FL_EXPORT void screen_work_area(int &X, int &Y, int &W, int &H); // via screen driver +static FL_EXPORT float screen_scale(int n); // via screen driver +static FL_EXPORT void screen_scale(int n, float factor); // via screen driver +static FL_EXPORT int screen_scaling_supported(); +static FL_EXPORT void keyboard_screen_scaling(int value); /** @} */ @@ -575,27 +580,27 @@ FL_EXPORT extern void keyboard_screen_scaling(int value); @{ */ // color map: -FL_EXPORT extern void set_color(Fl_Color, uchar, uchar, uchar); -FL_EXPORT extern void set_color(Fl_Color, uchar, uchar, uchar, uchar); +static FL_EXPORT void set_color(Fl_Color, uchar, uchar, uchar); +static FL_EXPORT void set_color(Fl_Color, uchar, uchar, uchar, uchar); /** Sets an entry in the fl_color index table. You can set it to any 8-bit RGB color. The color is not allocated until fl_color(i) is used. */ -FL_EXPORT extern void set_color(Fl_Color i, unsigned c); // platform dependent -FL_EXPORT extern unsigned get_color(Fl_Color i); -FL_EXPORT extern void get_color(Fl_Color i, uchar &red, uchar &green, uchar &blue); -FL_EXPORT extern void get_color(Fl_Color i, uchar &red, uchar &green, uchar &blue, uchar &alpha); +static FL_EXPORT void set_color(Fl_Color i, unsigned c); // platform dependent +static FL_EXPORT unsigned get_color(Fl_Color i); +static FL_EXPORT void get_color(Fl_Color i, uchar &red, uchar &green, uchar &blue); +static FL_EXPORT void get_color(Fl_Color i, uchar &red, uchar &green, uchar &blue, uchar &alpha); /** Frees the specified color from the colormap, if applicable. If overlay is non-zero then the color is freed from the overlay colormap. */ -FL_EXPORT extern void free_color(Fl_Color i, int overlay = 0); // platform dependent +static FL_EXPORT void free_color(Fl_Color i, int overlay = 0); // platform dependent // fonts: -FL_EXPORT extern const char* get_font(Fl_Font); +static FL_EXPORT const char* get_font(Fl_Font); /** Get a human-readable string describing the family of this face. This @@ -609,7 +614,7 @@ FL_EXPORT extern const char* get_font(Fl_Font); forward and back for a set with non-zero attributes, these faces along with the face with a zero attribute before them constitute a family. */ -FL_EXPORT extern const char* get_font_name(Fl_Font, int* attributes = 0); +static FL_EXPORT const char* get_font_name(Fl_Font, int* attributes = 0); /** Return an array of sizes in \p sizep. The return value is the @@ -622,9 +627,9 @@ FL_EXPORT extern const char* get_font_name(Fl_Font, int* attributes = 0); points at a static buffer that is overwritten each call. Under X this will open the display. */ -FL_EXPORT extern int get_font_sizes(Fl_Font, int*& sizep); -FL_EXPORT extern void set_font(Fl_Font, const char*); -FL_EXPORT extern void set_font(Fl_Font, Fl_Font); +static FL_EXPORT int get_font_sizes(Fl_Font, int*& sizep); +static FL_EXPORT void set_font(Fl_Font, const char*); +static FL_EXPORT void set_font(Fl_Font, Fl_Font); /** FLTK will open the display, and add every fonts on the server to the @@ -653,7 +658,7 @@ FL_EXPORT extern void set_font(Fl_Font, Fl_Font); The return value is how many faces are in the table after this is done. */ -FL_EXPORT extern Fl_Font set_fonts(const char* = 0); // platform dependent +static FL_EXPORT Fl_Font set_fonts(const char* = 0); // platform dependent /** @} */ @@ -666,26 +671,26 @@ FL_EXPORT extern Fl_Font set_fonts(const char* = 0); // platform dependent /** @} */ // labeltypes: -FL_EXPORT extern void set_labeltype(Fl_Labeltype,Fl_Label_Draw_F*,Fl_Label_Measure_F*); +static FL_EXPORT void set_labeltype(Fl_Labeltype,Fl_Label_Draw_F*,Fl_Label_Measure_F*); /** Sets the functions to call to draw and measure a specific labeltype. */ -FL_EXPORT extern void set_labeltype(Fl_Labeltype, Fl_Labeltype from); // is it defined ? +static FL_EXPORT void set_labeltype(Fl_Labeltype, Fl_Labeltype from); // is it defined ? // boxtypes: -FL_EXPORT extern Fl_Box_Draw_F *get_boxtype(Fl_Boxtype); -FL_EXPORT extern void set_boxtype(Fl_Boxtype, Fl_Box_Draw_F*, +static FL_EXPORT Fl_Box_Draw_F *get_boxtype(Fl_Boxtype); +static FL_EXPORT void set_boxtype(Fl_Boxtype, Fl_Box_Draw_F*, uchar, uchar, uchar, uchar, Fl_Box_Draw_Focus_F* =NULL); -FL_EXPORT extern void set_boxtype(Fl_Boxtype, Fl_Boxtype from); -FL_EXPORT extern int box_dx(Fl_Boxtype); -FL_EXPORT extern int box_dy(Fl_Boxtype); -FL_EXPORT extern int box_dw(Fl_Boxtype); -FL_EXPORT extern int box_dh(Fl_Boxtype); +static FL_EXPORT void set_boxtype(Fl_Boxtype, Fl_Boxtype from); +static FL_EXPORT int box_dx(Fl_Boxtype); +static FL_EXPORT int box_dy(Fl_Boxtype); +static FL_EXPORT int box_dw(Fl_Boxtype); +static FL_EXPORT int box_dh(Fl_Boxtype); -FL_EXPORT extern bool box_bg(Fl_Boxtype); +static FL_EXPORT bool box_bg(Fl_Boxtype); -FL_EXPORT extern int draw_box_active(); -FL_EXPORT extern Fl_Color box_color(Fl_Color); -FL_EXPORT extern void set_box_color(Fl_Color); +static FL_EXPORT int draw_box_active(); +static FL_EXPORT Fl_Color box_color(Fl_Color); +static FL_EXPORT void set_box_color(Fl_Color); // back compatibility: @@ -693,19 +698,19 @@ FL_EXPORT extern void set_box_color(Fl_Color); @{ */ /** For back compatibility, sets the void Fl::fatal handler callback */ -FL_EXPORT inline void set_abort(Fl_Abort_Handler f) {fatal = f;} -FL_EXPORT extern void (*atclose)(Fl_Window*,void*); -FL_EXPORT extern void default_atclose(Fl_Window*,void*); +static FL_EXPORT inline void set_abort(Fl_Abort_Handler f) {fatal = f;} +static FL_EXPORT void (*atclose)(Fl_Window*,void*); +static FL_EXPORT void default_atclose(Fl_Window*,void*); /** For back compatibility, sets the Fl::atclose handler callback. You can now simply change the callback for the window instead. \see Fl_Window::callback(Fl_Callback*) */ -FL_EXPORT inline void set_atclose(Fl_Atclose_Handler f) {atclose = f;} +static FL_EXPORT inline void set_atclose(Fl_Atclose_Handler f) {atclose = f;} /** @} */ /** See grab(Fl_Window*) */ -FL_EXPORT inline void grab(Fl_Window& win) {grab(&win);} +static FL_EXPORT inline void grab(Fl_Window& win) {grab(&win);} // --- FLTK Multithreading support functions --- @@ -714,29 +719,29 @@ FL_EXPORT inline void grab(Fl_Window& win) {grab(&win);} @{ */ // Thread locking: -FL_EXPORT extern int lock(); -FL_EXPORT extern void unlock(); +static FL_EXPORT int lock(); +static FL_EXPORT void unlock(); // Thread wakup and defered calls: -FL_EXPORT extern void awake(); +static FL_EXPORT void awake(); FL_DEPRECATED("since 1.5.0 - use Fl::awake() or Fl::awake(handler, user_data) instead", -FL_EXPORT extern void awake(void* message)); -FL_EXPORT extern int awake(Fl_Awake_Handler handler, void* user_data=0); -FL_EXPORT extern int awake_once(Fl_Awake_Handler handler, void* user_data=0); +static FL_EXPORT void awake(void* message)); +static FL_EXPORT int awake(Fl_Awake_Handler handler, void* user_data=0); +static FL_EXPORT int awake_once(Fl_Awake_Handler handler, void* user_data=0); FL_DEPRECATED("since 1.5.0 - use Fl::awake() or Fl::awake(handler, user_data) instead", -FL_EXPORT extern void* thread_message()); // platform dependent +static FL_EXPORT void* thread_message()); // platform dependent /** @} */ -FL_EXPORT extern void use_high_res_GL(int val); -FL_EXPORT extern int use_high_res_GL(); +static FL_EXPORT void use_high_res_GL(int val); +static FL_EXPORT int use_high_res_GL(); -FL_EXPORT extern void draw_GL_text_with_textures(int val); -FL_EXPORT extern int draw_GL_text_with_textures(); +static FL_EXPORT void draw_GL_text_with_textures(int val); +static FL_EXPORT int draw_GL_text_with_textures(); -FL_EXPORT extern int system(const char *command); +static FL_EXPORT int system(const char *command); // Convert Windows commandline arguments to UTF-8 (documented in src/Fl.cxx) -FL_EXPORT extern int args_to_utf8(int argc, char ** &argv); +static FL_EXPORT int args_to_utf8(int argc, char ** &argv); #if FLTK_HAVE_CAIRO /** \defgroup group_cairo Cairo Support Functions and Classes @@ -745,18 +750,40 @@ FL_EXPORT extern int args_to_utf8(int argc, char ** &argv); // Cairo support API -FL_EXPORT extern cairo_t *cairo_make_current(Fl_Window *w); -FL_EXPORT extern void cairo_autolink_context(bool alink); -FL_EXPORT extern bool cairo_autolink_context(); -FL_EXPORT extern cairo_t *cairo_cc(); -FL_EXPORT extern void cairo_cc(cairo_t *c, bool own=false); -FL_EXPORT extern void cairo_flush(cairo_t *c); +static FL_EXPORT cairo_t *cairo_make_current(Fl_Window *w); +static FL_EXPORT void cairo_autolink_context(bool alink); +static FL_EXPORT bool cairo_autolink_context(); +static FL_EXPORT cairo_t *cairo_cc(); +static FL_EXPORT void cairo_cc(cairo_t *c, bool own=false); +static FL_EXPORT void cairo_flush(cairo_t *c); /** @} */ #endif // FLTK_HAVE_CAIRO -} // namespace Fl +/** \defgroup fl_del_widget Safe widget deletion support functions + + These functions, declared in , support deletion of widgets inside callbacks. + + Fl::delete_widget() should be called when deleting widgets + or complete widget trees (Fl_Group, Fl_Window, ...) inside + callbacks. + + The other functions are intended for internal use. The preferred + way to use them is by using the helper class Fl_Widget_Tracker. + + @{ */ + +// Widget deletion: +static FL_EXPORT void delete_widget(Fl_Widget *w); +static FL_EXPORT void do_widget_deletion(); +static FL_EXPORT void watch_widget_pointer(Fl_Widget *&w); +static FL_EXPORT void release_widget_pointer(Fl_Widget *&w); +static FL_EXPORT void clear_widget_pointer(Fl_Widget const *w); + +/** @} */ + +}; /** \defgroup fl_unicode Unicode and UTF-8 functions diff --git a/FL/Fl_Widget_Tracker.H b/FL/Fl_Widget_Tracker.H index 0a2a5b6da..0af6e0fcd 100644 --- a/FL/Fl_Widget_Tracker.H +++ b/FL/Fl_Widget_Tracker.H @@ -76,14 +76,14 @@ class FL_EXPORT Fl_Widget_Tracker { public: Fl_Widget_Tracker(Fl_Widget *wi); - // Rule of five. Note that we *can* implement these when we refactor widget - // tracking with a C++11 map or unordered_map, for example. - Fl_Widget_Tracker(const Fl_Widget_Tracker&) = delete; - Fl_Widget_Tracker(Fl_Widget_Tracker&&) = delete; - Fl_Widget_Tracker& operator=(const Fl_Widget_Tracker&) = delete; - Fl_Widget_Tracker& operator=(Fl_Widget_Tracker&&) = delete; ~Fl_Widget_Tracker(); +private: + Fl_Widget_Tracker(const Fl_Widget_Tracker&); + Fl_Widget_Tracker& operator=(const Fl_Widget_Tracker&); + +public: + /** Clear the widget pointer. */ @@ -109,47 +109,4 @@ public: }; -namespace Fl { - -/** \defgroup fl_del_widget Safe widget deletion support functions - - These functions, declared in , support deletion of widgets inside callbacks. - - Fl::delete_widget() should be called when deleting widgets - or complete widget trees (Fl_Group, Fl_Window, ...) inside - callbacks. - - The other functions are intended for internal use. The preferred - way to use them is by using the helper class Fl_Widget_Tracker. - - The following is to show how it works ... - - There are three groups of related methods: - - -# scheduled widget deletion - - Fl::delete_widget() schedules widgets for deletion - - Fl::do_widget_deletion() deletes all scheduled widgets - -# widget watch list ("smart pointers") - - Fl::watch_widget_pointer() adds a widget pointer to the watch list - - Fl::release_widget_pointer() removes a widget pointer from the watch list - - Fl::clear_widget_pointer() clears a widget pointer \e in the watch list - -# the class Fl_Widget_Tracker: - - the constructor calls Fl::watch_widget_pointer() - - the destructor calls Fl::release_widget_pointer() - - the access methods can be used to test, if a widget has been deleted - \see Fl_Widget_Tracker. - - @{ */ - -// Widget deletion: -FL_EXPORT extern void delete_widget(Fl_Widget *w); -FL_EXPORT extern void do_widget_deletion(); -FL_EXPORT extern void watch_widget_pointer(Fl_Widget *&w); -FL_EXPORT extern void release_widget_pointer(Fl_Widget *&w); -FL_EXPORT extern void clear_widget_pointer(Fl_Widget const *w); - -/** @} */ - -} // namespace Fl - #endif // !Fl_Widget_Tracker_H diff --git a/FL/core/events.H b/FL/core/events.H index 01c0fd7ed..8454fc501 100644 --- a/FL/core/events.H +++ b/FL/core/events.H @@ -16,60 +16,48 @@ /** \file FL/core/events.H \brief Global event handling variables and functions. + This file is included within class Fl in FL/Fl.H. */ -#ifndef Fl_core_events_H -#define Fl_core_events_H - -#include // build configuration -#include // for FL_EXPORT -#include // widget callbacks and services - -class Fl_Widget; - -namespace Fl { - -// -// Event Variables (Internal) +// --- Event Variables (Internal) --- // Note: These variables should be private, but would harm back compatibility. -// #ifndef FL_DOXYGEN // Core event information -FL_EXPORT extern int e_number; ///< Current event type -FL_EXPORT extern int e_state; ///< Keyboard/mouse button states +static FL_EXPORT int e_number; ///< Current event type +static FL_EXPORT int e_state; ///< Keyboard/mouse button states // Mouse position and movement -FL_EXPORT extern int e_x; ///< Mouse X position (window relative) -FL_EXPORT extern int e_y; ///< Mouse Y position (window relative) -FL_EXPORT extern int e_x_root; ///< Mouse X position (screen absolute) -FL_EXPORT extern int e_y_root; ///< Mouse Y position (screen absolute) -FL_EXPORT extern int e_dx; ///< Mouse wheel horizontal delta -FL_EXPORT extern int e_dy; ///< Mouse wheel vertical delta +static FL_EXPORT int e_x; ///< Mouse X position (window relative) +static FL_EXPORT int e_y; ///< Mouse Y position (window relative) +static FL_EXPORT int e_x_root; ///< Mouse X position (screen absolute) +static FL_EXPORT int e_y_root; ///< Mouse Y position (screen absolute) +static FL_EXPORT int e_dx; ///< Mouse wheel horizontal delta +static FL_EXPORT int e_dy; ///< Mouse wheel vertical delta // Mouse click handling -FL_EXPORT extern int e_clicks; ///< Number of consecutive clicks -FL_EXPORT extern int e_is_click; ///< True if event qualifies as click +static FL_EXPORT int e_clicks; ///< Number of consecutive clicks +static FL_EXPORT int e_is_click; ///< True if event qualifies as click // Keyboard event data -FL_EXPORT extern int e_keysym; ///< Key symbol for current event -FL_EXPORT extern int e_original_keysym; ///< Original key before NumLock translation -FL_EXPORT extern char* e_text; ///< Text associated with key event -FL_EXPORT extern int e_length; ///< Length of text in e_text +static FL_EXPORT int e_keysym; ///< Key symbol for current event +static FL_EXPORT int e_original_keysym; ///< Original key before NumLock translation +static FL_EXPORT char* e_text; ///< Text associated with key event +static FL_EXPORT int e_length; ///< Length of text in e_text // Clipboard data (for paste events) -FL_EXPORT extern void* e_clipboard_data; ///< Pasted data pointer -FL_EXPORT extern const char* e_clipboard_type; ///< Type of pasted data +static FL_EXPORT void* e_clipboard_data; ///< Pasted data pointer +static FL_EXPORT const char* e_clipboard_type; ///< Type of pasted data // Event handling infrastructure -FL_EXPORT extern Fl_Event_Dispatch e_dispatch; ///< Custom event dispatcher -FL_EXPORT extern Fl_Callback_Reason callback_reason_; ///< Reason for current callback +static FL_EXPORT Fl_Event_Dispatch e_dispatch; ///< Custom event dispatcher +static FL_EXPORT Fl_Callback_Reason callback_reason_; ///< Reason for current callback // Widget state tracking -FL_EXPORT extern Fl_Widget* belowmouse_; ///< Widget under mouse cursor -FL_EXPORT extern Fl_Widget* pushed_; ///< Widget receiving drag events -FL_EXPORT extern Fl_Widget* focus_; ///< Widget with keyboard focus +static FL_EXPORT Fl_Widget* belowmouse_; ///< Widget under mouse cursor +static FL_EXPORT Fl_Widget* pushed_; ///< Widget receiving drag events +static FL_EXPORT Fl_Widget* focus_; ///< Widget with keyboard focus // Event variables should be private, but would harm back compatibility. @@ -90,7 +78,7 @@ FL_EXPORT extern Fl_Widget* focus_; ///< Widget with keyboar to determine if a callback is being done in response to a keypress, mouse click, etc. */ -FL_EXPORT inline int event() { return e_number; } +static FL_EXPORT inline int event() { return e_number; } // // Mouse Position Functions @@ -100,13 +88,13 @@ FL_EXPORT inline int event() { return e_number; } Returns the mouse position of the event relative to the Fl_Window it was passed to. */ -FL_EXPORT inline int event_x() { return e_x; } +static FL_EXPORT inline int event_x() { return e_x; } /** Returns the mouse position of the event relative to the Fl_Window it was passed to. */ -FL_EXPORT inline int event_y() { return e_y; } +static FL_EXPORT inline int event_y() { return e_y; } /** Returns the mouse position on the screen of the event. To find the @@ -114,7 +102,7 @@ FL_EXPORT inline int event_y() { return e_y; } difference between event_x_root(),event_y_root() and event_x(),event_y(). */ -FL_EXPORT inline int event_x_root() { return e_x_root; } +static FL_EXPORT inline int event_x_root() { return e_x_root; } /** Returns the mouse position on the screen of the event. To find the @@ -122,7 +110,7 @@ FL_EXPORT inline int event_x_root() { return e_x_root; } difference between event_x_root(),event_y_root() and event_x(),event_y(). */ -FL_EXPORT inline int event_y_root() { return e_y_root; } +static FL_EXPORT inline int event_y_root() { return e_y_root; } // // Mouse Wheel Functions @@ -132,13 +120,13 @@ FL_EXPORT inline int event_y_root() { return e_y_root; } Returns the current horizontal mouse scrolling associated with the FL_MOUSEWHEEL event. Right is positive. */ -FL_EXPORT inline int event_dx() { return e_dx; } +static FL_EXPORT inline int event_dx() { return e_dx; } /** Returns the current vertical mouse scrolling associated with the FL_MOUSEWHEEL event. Down is positive. */ -FL_EXPORT inline int event_dy() { return e_dy; } +static FL_EXPORT inline int event_dy() { return e_dy; } // // Mouse Query Functions @@ -152,7 +140,7 @@ FL_EXPORT inline int event_dy() { return e_dy; } position your first window). If the display is not open, this will open it. */ -FL_EXPORT extern void get_mouse(int &,int &); +static FL_EXPORT void get_mouse(int &,int &); // // Mouse Click Functions @@ -166,7 +154,7 @@ FL_EXPORT extern void get_mouse(int &,int &); again while event_is_click() is true. */ -FL_EXPORT inline int event_clicks() { return e_clicks; } +static FL_EXPORT inline int event_clicks() { return e_clicks; } /** Manually sets the number returned by Fl::event_clicks(). @@ -175,7 +163,7 @@ FL_EXPORT inline int event_clicks() { return e_clicks; } \param[in] i corresponds to no double-click if 0, i+1 mouse clicks otherwise \see int event_clicks() */ -FL_EXPORT inline void event_clicks(int i) { e_clicks = i; } +static FL_EXPORT inline void event_clicks(int i) { e_clicks = i; } /** Returns non-zero if the mouse has not moved far enough @@ -184,7 +172,7 @@ FL_EXPORT inline void event_clicks(int i) { e_clicks = i; } "click". You can test this on FL_DRAG, FL_RELEASE, and FL_MOVE events. */ -FL_EXPORT inline int event_is_click() { return e_is_click; } +static FL_EXPORT inline int event_is_click() { return e_is_click; } /** Clears the value returned by Fl::event_is_click(). @@ -192,7 +180,7 @@ FL_EXPORT inline int event_is_click() { return e_is_click; } click from being counted as a double-click or to make a popup menu pick an item with a single click. Don't pass non-zero to this. */ -FL_EXPORT inline void event_is_click(int i) { e_is_click = i; } +static FL_EXPORT inline void event_is_click(int i) { e_is_click = i; } // // Mouse Button Functions @@ -209,7 +197,7 @@ FL_EXPORT inline void event_is_click(int i) { e_is_click = i; } \retval FL_FORWARD_MOUSE \see Fl::event_buttons(), Fl::event_state() */ -FL_EXPORT inline int event_button() { return e_keysym - FL_Button; } +static FL_EXPORT inline int event_button() { return e_keysym - FL_Button; } // // Event State Functions @@ -224,20 +212,16 @@ FL_EXPORT inline int event_button() { return e_keysym - FL_Button; } \note FLTK platforms differ in what Fl::event_state() returns when it is called while a modifier key or mouse button is being pressed or released. - - Under X11 and Wayland, Fl::event_state() indicates the state of the modifier keys and + - Under X11, Fl::event_state() indicates the state of the modifier keys and mouse buttons just \b prior to the event. Thus, during the \c FL_KEYDOWN event generated when pressing the shift key, for example, the \c FL_SHIFT bit of event_state() is 0 and becomes 1 only at the next event which can be any other event, including e.g. \c FL_MOVE. - - Under other platforms the reported state of modifier keys or mouse buttons includes that - of the key or button being pressed or released. - Fl::event_state() returns the same value under all platforms when it's called while a non-modifier key (e.g. a letter or function key) is being pressed or released. - X servers do not agree on shift states, and \c FL_NUM_LOCK, \c FL_META, and \c FL_SCROLL_LOCK may not work. - The values were selected to match the XFree86 server on Linux. - \note This inconsistency \b may be fixed (on X11 and Wayland) in a later release. - The legal event state bits are: | Device | State Bit | Key or Button | Since | @@ -255,14 +239,14 @@ FL_EXPORT inline int event_button() { return e_keysym - FL_Button; } | Mouse | FL_BUTTON4 | side button 1 (back) | 1.3.10 | | Mouse | FL_BUTTON5 | side button 2 (forward) | 1.3.10 | */ -FL_EXPORT inline int event_state() { return e_state; } +static FL_EXPORT inline int event_state() { return e_state; } /** Returns non-zero if any of the passed event state bits are turned on. Use \p mask to pass the event states you're interested in. The legal event state bits are defined in Fl::event_state(). */ -FL_EXPORT inline int event_state(int mask) { return e_state & mask; } +static FL_EXPORT inline int event_state(int mask) { return e_state & mask; } // // Keyboard Event Functions @@ -279,7 +263,7 @@ FL_EXPORT inline int event_state(int mask) { return e_state & mask; } \returns an integer 'key code', or 0 if the last event was not a key press or release. \see int event_key(int), event_text(), compose(int&). */ -FL_EXPORT inline int event_key() { return e_keysym; } +static FL_EXPORT inline int event_key() { return e_keysym; } /** Returns the keycode of the last key event, regardless of the NumLock state. @@ -289,7 +273,7 @@ FL_EXPORT inline int event_key() { return e_keysym; } event_key() returns the translated key code, whereas event_original_key() returns the keycode before NumLock translation. */ -FL_EXPORT inline int event_original_key() { return e_original_keysym; } +static FL_EXPORT inline int event_original_key() { return e_original_keysym; } /** Returns true if the given \p key was held @@ -327,17 +311,15 @@ FL_EXPORT inline int event_original_key() { return e_original_keysym; } symbols used by Fl::event_state(). On X Fl::get_key(FL_Button+n) does not work. - - On Windows Fl::get_key(FL_KP_Enter) and Fl::event_key(FL_KP_Enter) do not work. */ -FL_EXPORT extern int event_key(int key); +static FL_EXPORT int event_key(int key); /** Returns true if the given \p key is held down now. Under X this requires a round-trip to the server and is much slower than Fl::event_key(int). \see event_key(int) */ -FL_EXPORT extern int get_key(int key); // platform dependent +static FL_EXPORT int get_key(int key); // platform dependent // // Text and Clipboard Functions @@ -357,7 +339,7 @@ FL_EXPORT extern int get_key(int key); // platform dependent \returns A NULL terminated text string equivalent of the last keystroke. */ -FL_EXPORT inline const char* event_text() { return e_text; } +static FL_EXPORT inline const char* event_text() { return e_text; } /** Returns the length of the text in Fl::event_text(). There @@ -365,86 +347,86 @@ FL_EXPORT inline const char* event_text() { return e_text; } be a nul before that if the keystroke translates to a nul character or you paste a nul character. */ -FL_EXPORT inline int event_length() { return e_length; } +static FL_EXPORT inline int event_length() { return e_length; } /** Denotes plain textual data */ -FL_EXPORT extern char const * const clipboard_plain_text; +static FL_EXPORT char const * const clipboard_plain_text; /** Denotes image data */ -FL_EXPORT extern char const * const clipboard_image; +static FL_EXPORT char const * const clipboard_image; /** During an FL_PASTE event of non-textual data, returns a pointer to the pasted data. The returned data is an Fl_RGB_Image * when the result of Fl::event_clipboard_type() is Fl::clipboard_image. */ -FL_EXPORT inline void *event_clipboard() { return e_clipboard_data; } +static FL_EXPORT inline void *event_clipboard() { return e_clipboard_data; } /** Returns the type of the pasted data during an FL_PASTE event. This type can be Fl::clipboard_plain_text or Fl::clipboard_image. */ -FL_EXPORT inline const char *event_clipboard_type() { return e_clipboard_type; } +static FL_EXPORT inline const char *event_clipboard_type() { return e_clipboard_type; } // // Advanced Event Functions // -FL_EXPORT extern int compose(int &del); -FL_EXPORT extern void compose_reset(); -FL_EXPORT extern int event_inside(int,int,int,int); -FL_EXPORT extern int event_inside(const Fl_Widget*); -FL_EXPORT extern int test_shortcut(Fl_Shortcut); +static FL_EXPORT int compose(int &del); +static FL_EXPORT void compose_reset(); +static FL_EXPORT int event_inside(int,int,int,int); +static FL_EXPORT int event_inside(const Fl_Widget*); +static FL_EXPORT int test_shortcut(Fl_Shortcut); -FL_EXPORT extern void enable_im(); -FL_EXPORT extern void disable_im(); +static FL_EXPORT void enable_im(); +static FL_EXPORT void disable_im(); // // Event Handling and Widget Management // -FL_EXPORT extern int handle(int, Fl_Window*); -FL_EXPORT extern int handle_(int, Fl_Window*); +static FL_EXPORT int handle(int, Fl_Window*); +static FL_EXPORT int handle_(int, Fl_Window*); /** Gets the widget that is below the mouse. \see belowmouse(Fl_Widget*) */ -FL_EXPORT inline Fl_Widget* belowmouse() { return belowmouse_; } -FL_EXPORT extern void belowmouse(Fl_Widget*); +static FL_EXPORT inline Fl_Widget* belowmouse() { return belowmouse_; } +static FL_EXPORT void belowmouse(Fl_Widget*); /** Gets the widget that is being pushed. \see void pushed(Fl_Widget*) */ -FL_EXPORT inline Fl_Widget* pushed() { return pushed_; } -FL_EXPORT extern void pushed(Fl_Widget*); +static FL_EXPORT inline Fl_Widget* pushed() { return pushed_; } +static FL_EXPORT void pushed(Fl_Widget*); /** Gets the current Fl::focus() widget. \sa Fl::focus(Fl_Widget*) */ -FL_EXPORT inline Fl_Widget* focus() { return focus_; } -FL_EXPORT extern void focus(Fl_Widget*); +static FL_EXPORT inline Fl_Widget* focus() { return focus_; } +static FL_EXPORT void focus(Fl_Widget*); -FL_EXPORT extern void add_handler(Fl_Event_Handler ha); -FL_EXPORT extern void add_handler(Fl_Event_Handler ha, Fl_Event_Handler before); -FL_EXPORT extern Fl_Event_Handler last_handler(); -FL_EXPORT extern void remove_handler(Fl_Event_Handler h); -FL_EXPORT extern void add_system_handler(Fl_System_Handler h, void *data); -FL_EXPORT extern void remove_system_handler(Fl_System_Handler h); -FL_EXPORT extern void event_dispatch(Fl_Event_Dispatch d); -FL_EXPORT extern Fl_Event_Dispatch event_dispatch(); -FL_EXPORT extern Fl_Callback_Reason callback_reason(); +static FL_EXPORT void add_handler(Fl_Event_Handler ha); +static FL_EXPORT void add_handler(Fl_Event_Handler ha, Fl_Event_Handler before); +static FL_EXPORT Fl_Event_Handler last_handler(); +static FL_EXPORT void remove_handler(Fl_Event_Handler h); +static FL_EXPORT void add_system_handler(Fl_System_Handler h, void *data); +static FL_EXPORT void remove_system_handler(Fl_System_Handler h); +static FL_EXPORT void event_dispatch(Fl_Event_Dispatch d); +static FL_EXPORT Fl_Event_Dispatch event_dispatch(); +static FL_EXPORT Fl_Callback_Reason callback_reason(); // // Convenience State Check Functions // /** Returns non-zero if the Shift key is pressed. */ -FL_EXPORT inline int event_shift() { return e_state & FL_SHIFT; } +static FL_EXPORT inline int event_shift() { return e_state & FL_SHIFT; } /** Returns non-zero if the Control key is pressed. */ -FL_EXPORT inline int event_ctrl() { return e_state & FL_CTRL; } +static FL_EXPORT inline int event_ctrl() { return e_state & FL_CTRL; } /** Returns non-zero if the FL_COMMAND key is pressed, either FL_CTRL or on OSX FL_META. */ -FL_EXPORT inline int event_command() { return e_state & FL_COMMAND; } +static FL_EXPORT inline int event_command() { return e_state & FL_COMMAND; } /** Returns non-zero if the Alt key is pressed. */ -FL_EXPORT inline int event_alt() { return e_state & FL_ALT; } +static FL_EXPORT inline int event_alt() { return e_state & FL_ALT; } // // Mouse Button State Functions @@ -458,40 +440,36 @@ FL_EXPORT inline int event_alt() { return e_state & FL_ALT; } caused an FL_RELEASE event, you can use Fl::event_button() instead. \return a bit mask value like { [FL_BUTTON1] | [FL_BUTTON2] | ... | [FL_BUTTON5] } */ -FL_EXPORT inline int event_buttons() { return e_state & FL_BUTTONS; } +static FL_EXPORT inline int event_buttons() { return e_state & FL_BUTTONS; } /** Returns non-zero if mouse button 1 is currently held down. For more details, see Fl::event_buttons(). */ -FL_EXPORT inline int event_button1() { return e_state & FL_BUTTON1; } +static FL_EXPORT inline int event_button1() { return e_state & FL_BUTTON1; } /** Returns non-zero if mouse button 2 is currently held down. For more details, see Fl::event_buttons(). */ -FL_EXPORT inline int event_button2() { return e_state & FL_BUTTON2; } +static FL_EXPORT inline int event_button2() { return e_state & FL_BUTTON2; } /** Returns non-zero if mouse button 3 is currently held down. For more details, see Fl::event_buttons(). */ -FL_EXPORT inline int event_button3() { return e_state & FL_BUTTON3; } +static FL_EXPORT inline int event_button3() { return e_state & FL_BUTTON3; } /** Returns non-zero if mouse button 4 is currently held down. For more details, see Fl::event_buttons(). */ -FL_EXPORT inline int event_button4() { return e_state & FL_BUTTON4; } +static FL_EXPORT inline int event_button4() { return e_state & FL_BUTTON4; } /** Returns non-zero if mouse button 5 is currently held down. For more details, see Fl::event_buttons(). */ -FL_EXPORT inline int event_button5() { return e_state & FL_BUTTON5; } +static FL_EXPORT inline int event_button5() { return e_state & FL_BUTTON5; } /** @} */ - -} // namespace Fl - -#endif // !Fl_core_events_H diff --git a/FL/core/options.H b/FL/core/options.H index 43f4bec20..0ecdfabeb 100644 --- a/FL/core/options.H +++ b/FL/core/options.H @@ -16,16 +16,10 @@ /** \file FL/core/options.H \brief Application and system wide options management. + This file is included within class Fl in FL/Fl.H. */ -#ifndef Fl_core_options_H -#define Fl_core_options_H - -#include // build configuration -#include // for FL_EXPORT - - -namespace Fl { +// --- Options declarations --- /** Enumerator for global FLTK options. These options can be set system wide, per user, or for the running @@ -102,8 +96,8 @@ typedef enum { /// When switched on and when the keyboard in use has '+' in the shifted position of its key, /// pressing that key and ctrl triggers the zoom-in operation. /// When switched off (default), the zoom-in operation requires that also the shift key is pressed. - /// Under macOS, this option has no effect because the OS itself generates ⌘= followed - /// by ⌘+ when pressing ⌘ and the '=|+' key without pressing shift. + /// Under macOS, this option has no effect because the OS itself generates cmd= followed + /// by cmd+ when pressing cmd and the '=|+' key without pressing shift. OPTION_SIMPLE_ZOOM_SHORTCUT, // don't change this, leave it always as the last element @@ -115,12 +109,12 @@ typedef enum { Return a global setting for all FLTK applications, possibly overridden by a setting specifically for this application. */ -FL_EXPORT extern bool option(Fl_Option opt); +static FL_EXPORT bool option(Fl_Option opt); /* Override an option while the application is running. */ -FL_EXPORT extern void option(Fl_Option opt, bool val); +static FL_EXPORT void option(Fl_Option opt, bool val); // Visible focus methods... @@ -129,14 +123,14 @@ FL_EXPORT extern void option(Fl_Option opt, bool val); non-text widgets. The default mode is to enable keyboard focus for all widgets. */ -FL_EXPORT inline void visible_focus(int v) { option(OPTION_VISIBLE_FOCUS, (v!=0)); } +static FL_EXPORT inline void visible_focus(int v) { option(OPTION_VISIBLE_FOCUS, (v!=0)); } /** Gets or sets the visible keyboard focus on buttons and other non-text widgets. The default mode is to enable keyboard focus for all widgets. */ -FL_EXPORT inline int visible_focus() { return option(OPTION_VISIBLE_FOCUS); } +static FL_EXPORT inline int visible_focus() { return option(OPTION_VISIBLE_FOCUS); } // Drag-n-drop text operation methods... @@ -146,7 +140,7 @@ FL_EXPORT inline int visible_focus() { return option(OPTION_VISIBLE_FOCUS); } be dragged from text fields or dragged within a text field as a cut/paste shortcut. */ -FL_EXPORT inline void dnd_text_ops(int v) { option(OPTION_DND_TEXT, (v!=0)); } +static FL_EXPORT inline void dnd_text_ops(int v) { option(OPTION_DND_TEXT, (v!=0)); } /** Gets whether drag and drop text operations are @@ -154,9 +148,4 @@ FL_EXPORT inline void dnd_text_ops(int v) { option(OPTION_DND_TEXT, (v!=0)); } be dragged from text fields or dragged within a text field as a cut/paste shortcut. */ -FL_EXPORT inline int dnd_text_ops() { return option(OPTION_DND_TEXT); } - -} // namespace Fl - - -#endif // !Fl_core_options_H +static FL_EXPORT inline int dnd_text_ops() { return option(OPTION_DND_TEXT); } -- cgit v1.2.3