/* * This file is part of the XForms library package. * * XForms is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1, or * (at your option) any later version. * * XForms is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with XForms. If not, see . */ /********************** crop here for forms.h **********************/ /** * \file Basic.h * * Basic definitions and limits. * Window system independent prototypes * * Modify with care */ #ifndef FL_BASIC_H #define FL_BASIC_H #include #include #include #include #include #include #if defined __GNUC__ #define FL_UNUSED_ARG __attribute__ ((unused)) #else #define FL_UNUSED_ARG #endif /* Some general constants */ enum { FL_ON = 1, FL_OK = 1, FL_VALID = 1, FL_PREEMPT = 1, FL_AUTO = 2, FL_WHEN_NEEDED = FL_AUTO, FL_OFF = 0, FL_CANCEL = 0, FL_INVALID = 0, /* WM_DELETE_WINDOW callback return */ FL_IGNORE = -1 }; /* Max directory length */ #ifndef FL_PATH_MAX #ifndef PATH_MAX #define FL_PATH_MAX 1024 #else #define FL_PATH_MAX PATH_MAX #endif #endif /* ! def FL_PATH_MAX */ /* The screen coordinate unit, FL_Coord, must be of signed type */ typedef int FL_Coord; #define FL_COORD FL_Coord typedef unsigned long FL_COLOR; /* Coordinates can be in pixels, milli-meters or points (1/72inch) */ typedef enum { FL_COORD_PIXEL, /* default, Pixel */ FL_COORD_MM, /* milli-meter */ FL_COORD_POINT, /* point */ FL_COORD_centiMM, /* one hundredth of a mm */ FL_COORD_centiPOINT /* one hundredth of a point */ } FL_COORD_UNIT; /* All object classes. */ typedef enum { FL_INVALID_CLASS, /* 0 */ FL_BUTTON, /* 1 */ FL_LIGHTBUTTON, /* 2 */ FL_ROUNDBUTTON, /* 3 */ FL_ROUND3DBUTTON, /* 4 */ FL_CHECKBUTTON, /* 5 */ FL_BITMAPBUTTON, /* 6 */ FL_PIXMAPBUTTON, /* 7 */ FL_BITMAP, /* 8 */ FL_PIXMAP, /* 9 */ FL_BOX, /* 10 */ FL_TEXT, /* 11 */ FL_MENU, /* 12 */ FL_CHART, /* 13 */ FL_CHOICE, /* 14 */ FL_COUNTER, /* 15 */ FL_SLIDER, /* 16 */ FL_VALSLIDER, /* 17 */ FL_INPUT, /* 18 */ FL_BROWSER, /* 19 */ FL_DIAL, /* 20 */ FL_TIMER, /* 21 */ FL_CLOCK, /* 22 */ FL_POSITIONER, /* 23 */ FL_FREE, /* 24 */ FL_XYPLOT, /* 25 */ FL_FRAME, /* 26 */ FL_LABELFRAME, /* 27 */ FL_CANVAS, /* 28 */ FL_GLCANVAS, /* 29 */ FL_TABFOLDER, /* 30 */ FL_SCROLLBAR, /* 31 */ FL_SCROLLBUTTON, /* 32 */ FL_MENUBAR, /* 33 */ FL_TEXTBOX, /* 34, for internal use only */ FL_LABELBUTTON, /* 35 */ FL_COMBOBOX, /* 36 */ FL_IMAGECANVAS, /* 37 */ FL_THUMBWHEEL, /* 38 */ FL_COLORWHEEL, /* 39 */ FL_FORMBROWSER, /* 40 */ FL_SELECT, /* 41 */ FL_NMENU, /* 42 */ FL_SPINNER, /* 43 */ FL_TBOX, /* 44 */ FL_CLASS_END /* sentinel */ } FL_CLASS; #define FL_BEGIN_GROUP 10000 #define FL_END_GROUP 20000 #define FL_USER_CLASS_START 1001 /* min. user class value */ #define FL_USER_CLASS_END 9999 /* max. user class value */ /* Maximum border width (in pixel) */ #define FL_MAX_BW 10 /* How to display a form onto screen */ typedef enum { FL_PLACE_FREE = 0, /* size remain resizable */ FL_PLACE_MOUSE = 1, /* mouse centered on form */ FL_PLACE_CENTER = 2, /* center of the screen */ FL_PLACE_POSITION = 4, /* specific position */ FL_PLACE_SIZE = 8, /* specific size */ FL_PLACE_GEOMETRY = 16, /* specific size and position */ FL_PLACE_ASPECT = 32, /* keep aspect ratio */ FL_PLACE_FULLSCREEN = 64, /* scale to fit to screen */ FL_PLACE_HOTSPOT = 128, /* so mouse fall on (x,y) */ FL_PLACE_ICONIC = 256, /* start in iconified form */ /* Modifiers */ FL_FREE_SIZE = ( 1 << 14 ), FL_FIX_SIZE = ( 1 << 15 ) /* seems to be useless, but some programs seem to rely on it... */ } FL_PLACE; #define FL_PLACE_FREE_CENTER ( FL_PLACE_CENTER | FL_FREE_SIZE ) #define FL_PLACE_CENTERFREE ( FL_PLACE_CENTER | FL_FREE_SIZE ) /* Window manager decoration request and forms attributes */ enum { FL_FULLBORDER = 1, /* normal */ FL_TRANSIENT, /* set TRANSIENT_FOR property */ FL_NOBORDER /* use override_redirect to supress decor. */ }; /* All box types */ typedef enum { FL_NO_BOX, /* 0 */ FL_UP_BOX, /* 1 */ FL_DOWN_BOX, /* 2 */ FL_BORDER_BOX, /* 3 */ FL_SHADOW_BOX, /* 4 */ FL_FRAME_BOX, /* 5 */ FL_ROUNDED_BOX, /* 6 */ FL_EMBOSSED_BOX, /* 7 */ FL_FLAT_BOX, /* 8 */ FL_RFLAT_BOX, /* 9 */ FL_RSHADOW_BOX, /* 10 */ FL_OVAL_BOX, /* 11 */ FL_ROUNDED3D_UPBOX, /* 12 */ FL_ROUNDED3D_DOWNBOX, /* 13 */ FL_OVAL3D_UPBOX, /* 14 */ FL_OVAL3D_DOWNBOX, /* 15 */ FL_OVAL3D_FRAMEBOX, /* 16 */ FL_OVAL3D_EMBOSSEDBOX, /* 17 */ /* for internal use only */ FL_TOPTAB_UPBOX, FL_SELECTED_TOPTAB_UPBOX, FL_BOTTOMTAB_UPBOX, FL_SELECTED_BOTTOMTAB_UPBOX, FL_MAX_BOX_STYLES /* sentinel */ } FL_BOX_TYPE; #define FL_IS_UPBOX( t ) ( ( t ) == FL_UP_BOX \ || ( t ) == FL_OVAL3D_UPBOX \ || ( t ) == FL_ROUNDED3D_UPBOX) #define FL_IS_DOWNBOX( t ) ( ( t ) == FL_DOWN_BOX \ || ( t ) == FL_OVAL3D_DOWNBOX \ || ( t ) == FL_ROUNDED3D_DOWNBOX) #define FL_TO_DOWNBOX( t ) ( ( t ) == FL_UP_BOX ? FL_DOWN_BOX: \ ( ( t ) == FL_ROUNDED3D_UPBOX ? \ FL_ROUNDED3D_DOWNBOX: \ ( ( t ) == FL_OVAL3D_UPBOX ? \ FL_OVAL3D_DOWNBOX : ( t ) ) ) ) /* How to place text relative to a box */ typedef enum { FL_ALIGN_CENTER, FL_ALIGN_TOP = 1, FL_ALIGN_BOTTOM = 2, FL_ALIGN_LEFT = 4, FL_ALIGN_RIGHT = 8, FL_ALIGN_LEFT_TOP = ( FL_ALIGN_TOP | FL_ALIGN_LEFT ), FL_ALIGN_RIGHT_TOP = ( FL_ALIGN_TOP | FL_ALIGN_RIGHT ), FL_ALIGN_LEFT_BOTTOM = ( FL_ALIGN_BOTTOM | FL_ALIGN_LEFT ), FL_ALIGN_RIGHT_BOTTOM = ( FL_ALIGN_BOTTOM | FL_ALIGN_RIGHT ), FL_ALIGN_INSIDE = ( 1 << 13 ), FL_ALIGN_VERT = ( 1 << 14 ), /* not functional yet */ /* the rest is for backward compatibility only, don't use! */ FL_ALIGN_TOP_LEFT = FL_ALIGN_LEFT_TOP, FL_ALIGN_TOP_RIGHT = FL_ALIGN_RIGHT_TOP, FL_ALIGN_BOTTOM_LEFT = FL_ALIGN_LEFT_BOTTOM, FL_ALIGN_BOTTOM_RIGHT = FL_ALIGN_RIGHT_BOTTOM } FL_ALIGN; FL_EXPORT int fl_is_inside_lalign( int align ); FL_EXPORT int fl_is_outside_lalign( int align ); FL_EXPORT int fl_is_center_lalign( int align ); FL_EXPORT int fl_to_inside_lalign( int align ); FL_EXPORT int fl_to_outside_lalign( int align ); /* Mouse buttons. Don't have to be consecutive */ enum { FL_MBUTTON1 = 1, FL_MBUTTON2, FL_MBUTTON3, FL_MBUTTON4, FL_MBUTTON5 }; #define FL_LEFT_MOUSE FL_MBUTTON1 #define FL_MIDDLE_MOUSE FL_MBUTTON2 #define FL_RIGHT_MOUSE FL_MBUTTON3 #define FL_SCROLLUP_MOUSE FL_MBUTTON4 #define FL_SCROLLDOWN_MOUSE FL_MBUTTON5 #define FL_LEFTMOUSE FL_LEFT_MOUSE #define FL_MIDDLEMOUSE FL_MIDDLE_MOUSE #define FL_RIGHTMOUSE FL_RIGHT_MOUSE #define FL_SCROLLUPMOUSE FL_SCROLLUP_MOUSE #define FL_SCROLLDOWNMOUSE FL_SCROLLDOWN_MOUSE /* control when to return input, slider and dial etc. object. */ #define FL_RETURN_NONE 0U #define FL_RETURN_CHANGED 1U #define FL_RETURN_END 2U #define FL_RETURN_END_CHANGED 4U #define FL_RETURN_SELECTION 8U #define FL_RETURN_DESELECTION 16U #define FL_RETURN_TRIGGERED 1024U #define FL_RETURN_ALWAYS ( ~ FL_RETURN_END_CHANGED ) /* Some special color indices for FL private colormap. It does not matter * what the value of each enum is, but it must start from 0 and be * consecutive. */ typedef enum { FL_BLACK, FL_RED, FL_GREEN, FL_YELLOW, FL_BLUE, FL_MAGENTA, FL_CYAN, FL_WHITE, FL_TOMATO, FL_INDIANRED, FL_SLATEBLUE, FL_COL1, FL_RIGHT_BCOL, FL_BOTTOM_BCOL, FL_TOP_BCOL, FL_LEFT_BCOL, FL_MCOL, FL_INACTIVE, FL_PALEGREEN, FL_DARKGOLD, FL_ORCHID, FL_DARKCYAN, FL_DARKTOMATO, FL_WHEAT, FL_DARKORANGE, FL_DEEPPINK, FL_CHARTREUSE, FL_DARKVIOLET, FL_SPRINGGREEN, FL_DODGERBLUE, FL_LIGHTER_COL1, FL_DARKER_COL1, FL_ALICEBLUE, FL_ANTIQUEWHITE, FL_AQUA, FL_AQUAMARINE, FL_AZURE, FL_BEIGE, FL_BISQUE, FL_BLANCHEDALMOND, FL_BLUEVIOLET, FL_BROWN, FL_BURLYWOOD, FL_CADETBLUE, FL_CHOCOLATE, FL_CORAL, FL_CORNFLOWERBLUE, FL_CORNSILK, FL_CRIMSON, FL_DARKBLUE, FL_DARKGOLDENROD, FL_DARKGRAY, FL_DARKGREEN, FL_DARKGREY, FL_DARKKHAKI, FL_DARKMAGENTA, FL_DARKOLIVEGREEN, FL_DARKORCHID, FL_DARKRED, FL_DARKSALMON, FL_DARKSEAGREEN, FL_DARKSLATEBLUE, FL_DARKSLATEGRAY, FL_DARKSLATEGREY, FL_DARKTURQUOISE, FL_DEEPSKYBLUE, FL_DIMGRAY, FL_DIMGREY, FL_FIREBRICK, FL_FLORALWHITE, FL_FORESTGREEN, FL_FUCHSIA, FL_GAINSBORO, FL_GHOSTWHITE, FL_GOLD, FL_GOLDENROD, FL_GRAY, FL_GREENYELLOW, FL_GREY, FL_HONEYDEW, FL_HOTPINK, FL_INDIGO, FL_IVORY, FL_KHAKI, FL_LAVENDER, FL_LAVENDERBLUSH, FL_LAWNGREEN, FL_LEMONCHIFFON, FL_LIGHTBLUE, FL_LIGHTCORAL, FL_LIGHTCYAN, FL_LIGHTGOLDENRODYELLOW, FL_LIGHTGRAY, FL_LIGHTGREEN, FL_LIGHTGREY, FL_LIGHTPINK, FL_LIGHTSALMON, FL_LIGHTSEAGREEN, FL_LIGHTSKYBLUE, FL_LIGHTSLATEGRAY, FL_LIGHTSLATEGREY, FL_LIGHTSTEELBLUE, FL_LIGHTYELLOW, FL_LIME, FL_LIMEGREEN, FL_LINEN, FL_MAROON, FL_MEDIUMAQUAMARINE, FL_MEDIUMBLUE, FL_MEDIUMORCHID, FL_MEDIUMPURPLE, FL_MEDIUMSEAGREEN, FL_MEDIUMSLATEBLUE, FL_MEDIUMSPRINGGREEN, FL_MEDIUMTURQUOISE, FL_MEDIUMVIOLETRED, FL_MIDNIGHTBLUE, FL_MINTCREAM, FL_MISTYROSE, FL_MOCCASIN, FL_NAVAJOWHITE, FL_NAVY, FL_OLDLACE, FL_OLIVE, FL_OLIVEDRAB, FL_ORANGE, FL_ORANGERED, FL_PALEGOLDENROD, FL_PALETURQUOISE, FL_PALEVIOLETRED, FL_PAPAYAWHIP, FL_PEACHPUFF, FL_PERU, FL_PINK, FL_PLUM, FL_POWDERBLUE, FL_PURPLE, FL_ROSYBROWN, FL_ROYALBLUE, FL_SADDLEBROWN, FL_SALMON, FL_SANDYBROWN, FL_SEAGREEN, FL_SEASHELL, FL_SIENNA, FL_SILVER, FL_SKYBLUE, FL_SLATEGRAY, FL_SLATEGREY, FL_SNOW, FL_STEELBLUE, FL_TAN, FL_TEAL, FL_THISTLE, FL_TURQUOISE, FL_VIOLET, FL_WHITESMOKE, FL_YELLOWGREEN, FL_FREE_COL1 = 256, FL_FREE_COL2, FL_FREE_COL3, FL_FREE_COL4, FL_FREE_COL5, FL_FREE_COL6, FL_FREE_COL7, FL_FREE_COL8, FL_FREE_COL9, FL_FREE_COL10, FL_FREE_COL11, FL_FREE_COL12, FL_FREE_COL13, FL_FREE_COL14, FL_FREE_COL15, FL_FREE_COL16, FL_NOCOLOR = INT_MAX } FL_PD_COL; #define FL_BUILT_IN_COLS ( FL_YELLOWGREEN + 1 ) #define FL_INACTIVE_COL FL_INACTIVE /* Some aliases for a number of colors */ #define FL_GRAY16 FL_RIGHT_BCOL #define FL_GRAY35 FL_BOTTOM_BCOL #define FL_GRAY80 FL_TOP_BCOL #define FL_GRAY90 FL_LEFT_BCOL #define FL_GRAY63 FL_COL1 #define FL_GRAY75 FL_MCOL #define FL_LCOL FL_BLACK #define FL_NoColor FL_NOCOLOR /* An alias probably for an earlier typo */ #define FL_DOGERBLUE FL_DODGERBLUE /* Events that a form reacts to */ typedef enum { FL_NOEVENT, /* 0 No event */ FL_DRAW, /* 1 object is asked to redraw itself */ FL_PUSH, /* 2 mouse button was pressed on the object */ FL_RELEASE, /* 3 mouse button was release gain */ FL_ENTER, /* 4 mouse entered the object */ FL_LEAVE, /* 5 mouse left the object */ FL_MOTION, /* 6 mouse motion over the object happend */ FL_FOCUS, /* 7 object obtained focus */ FL_UNFOCUS, /* 8 object lost focus */ FL_KEYPRESS, /* 9 key was pressed while object has focus */ FL_UPDATE, /* 10 for objects that need to update something from time to time */ FL_STEP, /* 11 */ FL_SHORTCUT, /* 12 */ FL_FREEMEM, /* 13 object is asked to free all its memory */ FL_OTHER, /* 14 property, selection etc */ FL_DRAWLABEL, /* 15 */ FL_DBLCLICK, /* 16 double click on object */ FL_TRPLCLICK, /* 17 triple click on object */ FL_ATTRIB, /* 18 an object attribute changed */ FL_KEYRELEASE, /* 19 key was released while object has focus */ FL_PS, /* 20 dump a form into EPS */ FL_MOVEORIGIN, /* 21 dragging the form across the screen changes its absolute x,y coords. Objects that themselves contain forms should ensure that they are up to date. */ FL_RESIZED, /* 22 the object has been resized by scale_form Tell it that this has happened so that it can resize any FL_FORMs that it contains. */ FL_PASTE, /* 23 text was pasted into input object */ FL_TRIGGER, /* 24 result of fl_trigger_object() */ /* The following are only for backward compatibility, not used anymore */ FL_MOVE = FL_MOTION, FL_KEYBOARD = FL_KEYPRESS, FL_MOUSE = FL_UPDATE } FL_EVENTS; /* Resize policies */ typedef enum { FL_RESIZE_NONE, FL_RESIZE_X, FL_RESIZE_Y, FL_RESIZE_ALL = ( FL_RESIZE_X | FL_RESIZE_Y ) } FL_RESIZE_T; /* Keyboard focus control */ typedef enum { FL_KEY_NORMAL = 1, /* normal keys(0-255) - tab +left/right */ FL_KEY_TAB = 2, /* normal keys + 4 direction cursor */ FL_KEY_SPECIAL = 4, /* only needs special keys (>255) */ FL_KEY_ALL = 7 /* all keys */ } FL_KEY; #define FL_ALT_MASK ( 1L << 25 ) /* alt + Key --> FL_ALT_MASK + key */ #define FL_CONTROL_MASK ( 1L << 26 ) #define FL_SHIFT_MASK ( 1L << 27 ) #define FL_ALT_VAL FL_ALT_MASK /* Don' use! */ #define MAX_SHORTCUTS 8 /* Pop-up menu item attributes. NOTE if more than 8, need to change * choice and menu class where mode is kept by a single byte */ enum { FL_PUP_NONE, FL_PUP_GREY = 1, FL_PUP_BOX = 2, FL_PUP_CHECK = 4, FL_PUP_RADIO = 8 }; #define FL_PUP_GRAY FL_PUP_GREY #define FL_PUP_TOGGLE FL_PUP_BOX /* not used anymore */ #define FL_PUP_INACTIVE FL_PUP_GREY /* Popup and menu entries */ typedef int ( * FL_PUP_CB )( int ); /* callback prototype */ typedef struct { const char * text; /* label of a popup/menu item */ FL_PUP_CB callback; /* the callback function */ const char * shortcut; /* hotkeys */ int mode; /* FL_PUP_GRAY, FL_PUP_CHECK etc */ } FL_PUP_ENTRY; #define FL_MENU_ENTRY FL_PUP_ENTRY /******************************************************************* * FONTS ******************************************************************/ #define FL_MAXFONTS 48 /* max number of fonts */ typedef enum { FL_INVALID_STYLE = -1, FL_NORMAL_STYLE, FL_BOLD_STYLE, FL_ITALIC_STYLE, FL_BOLDITALIC_STYLE, FL_FIXED_STYLE, FL_FIXEDBOLD_STYLE, FL_FIXEDITALIC_STYLE, FL_FIXEDBOLDITALIC_STYLE, FL_TIMES_STYLE, FL_TIMESBOLD_STYLE, FL_TIMESITALIC_STYLE, FL_TIMESBOLDITALIC_STYLE, FL_MISC_STYLE, FL_MISCBOLD_STYLE, FL_MISCITALIC_STYLE, FL_SYMBOL_STYLE, /* modfier masks. Need to fit a short */ FL_SHADOW_STYLE = ( 1 << 9 ), FL_ENGRAVED_STYLE = ( 1 << 10 ), FL_EMBOSSED_STYLE = ( 1 << 11 ) } FL_TEXT_STYLE; #define FL_FONT_STYLE FL_TEXT_STYLE #define special_style( a ) ( ( a ) >= FL_SHADOW_STYLE \ && ( a ) <= ( FL_EMBOSSED_STYLE + FL_MAXFONTS ) ) /* Standard sizes in XForms */ #define FL_TINY_SIZE 8 #define FL_SMALL_SIZE 10 #define FL_NORMAL_SIZE 12 #define FL_MEDIUM_SIZE 14 #define FL_LARGE_SIZE 18 #define FL_HUGE_SIZE 24 #define FL_DEFAULT_SIZE FL_SMALL_SIZE /* Defines for compatibility */ #define FL_TINY_FONT FL_TINY_SIZE #define FL_SMALL_FONT FL_SMALL_SIZE #define FL_NORMAL_FONT FL_NORMAL_SIZE #define FL_MEDIUM_FONT FL_MEDIUM_SIZE #define FL_LARGE_FONT FL_LARGE_SIZE #define FL_HUGE_FONT FL_HUGE_SIZE #define FL_NORMAL_FONT1 FL_SMALL_FONT #define FL_NORMAL_FONT2 FL_NORMAL_FONT #define FL_DEFAULT_FONT FL_SMALL_FONT #define FL_BOUND_WIDTH ( FL_Coord ) 1 /* Border width of boxes */ /* Definition of basic struct that holds an object */ #define FL_CLICK_TIMEOUT 400 /* double click interval */ typedef struct FL_FORM_ FL_FORM; typedef struct FL_OBJECT_ FL_OBJECT; typedef struct FL_pixmap_ FL_pixmap; struct FL_OBJECT_ { FL_FORM * form; /* the form this object belongs to */ void * u_vdata; /* anything the user likes */ char * u_cdata; /* anything the user likes */ long u_ldata; /* anything the user likes */ int objclass; /* class of object, button, slider etc */ int type; /* type within the class */ int boxtype; /* what kind of box type */ FL_Coord x, /* current obj. location and size */ y, w, h; double fl1, /* distances of upper left hand (1) and */ fr1, /* lower right hand corner (2) to left, */ ft1, /* right, top and bottom of enclosing */ fb1, /* form */ fl2, fr2, ft2, fb2; FL_Coord bw; FL_COLOR col1, /* colors of obj */ col2; char * label; /* object label */ FL_COLOR lcol; /* label color */ int align; int lsize, /* label size and style */ lstyle; long * shortcut; int ( * handle )( FL_OBJECT *, int, FL_Coord, FL_Coord, int, void * ); void ( * object_callback )( FL_OBJECT *, long ); long argument; void * spec; /* instantiation */ int ( * prehandle )( FL_OBJECT *, int, FL_Coord, FL_Coord, int, void * ); int ( * posthandle )( FL_OBJECT *, int, FL_Coord, FL_Coord, int, void * ); void ( * set_return )( FL_OBJECT *, unsigned int ); /* Re-configure preference */ unsigned int resize; /* what to do if WM resizes the FORM */ unsigned int nwgravity; /* how to re-position top-left corner */ unsigned int segravity; /* how to re-position lower-right corner */ FL_OBJECT * prev; /* prev. obj in form */ FL_OBJECT * next; /* next. obj in form */ FL_OBJECT * parent; FL_OBJECT * child; FL_OBJECT * nc; /* next child */ FL_pixmap * flpixmap; /* pixmap double buffering stateinfo */ int use_pixmap; /* true to use pixmap double buffering*/ /* Some interaction flags */ int returned; /* what last interaction returned */ unsigned int how_return; /* under which conditions to return */ int double_buffer; /* only used by mesa/gl canvas */ int pushed; int focus; int belowmouse; int active; /* if object accepts events */ int input; int wantkey; int radio; int automatic; int redraw; int visible; int is_under; /* if (partially) hidden by other object */ int clip; unsigned long click_timeout; void * c_vdata; /* for class use */ char * c_cdata; /* for class use */ long c_ldata; /* for class use */ FL_COLOR dbl_background; /* double buffer background */ char * tooltip; int tipID; int group_id; int want_motion; int want_update; }; /* Callback function for an entire form */ typedef void ( * FL_FORMCALLBACKPTR )( FL_OBJECT *, void * ); /* Object callback function */ typedef void ( * FL_CALLBACKPTR )( FL_OBJECT *, long ); /* Preemptive callback function */ typedef int ( * FL_RAW_CALLBACK )( FL_FORM *, void * ); /* At close (WM menu delete/close etc.) function */ typedef int ( * FL_FORM_ATCLOSE )( FL_FORM *, void * ); /* Deactivate/activate callback */ typedef void ( * FL_FORM_ATDEACTIVATE )( FL_FORM *, void * ); typedef void ( * FL_FORM_ATACTIVATE )( FL_FORM *, void * ); typedef int ( * FL_HANDLEPTR )( FL_OBJECT *, int, FL_Coord, FL_Coord, int, void * ); /* Error callback */ typedef void ( * FL_ERROR_FUNC )( const char *, const char *, ... ); FL_EXPORT FL_OBJECT *FL_EVENT; /*** FORM ****/ /* Form visibility state: form->visible */ enum { FL_BEING_HIDDEN = -1, FL_HIDDEN = 0, FL_INVISIBLE = FL_HIDDEN, FL_VISIBLE = 1 }; struct FL_FORM_ { void * fdui; /* for fdesign */ void * u_vdata; /* for application */ char * u_cdata; /* for application */ long u_ldata; /* for application */ char * label; /* window title */ Window window; /* X resource ID for window */ FL_Coord x, /* current geometry info */ y, w, h; int handle_dec_x, handle_dec_y; FL_Coord hotx, /* hot-spot of the form */ hoty; double w_hr, /* high resolution width and height */ h_hr; /* (needed for precise scaling) */ FL_OBJECT * first; FL_OBJECT * last; FL_OBJECT * focusobj; FL_FORMCALLBACKPTR form_callback; FL_FORM_ATACTIVATE activate_callback; FL_FORM_ATDEACTIVATE deactivate_callback; void * form_cb_data; void * activate_data; void * deactivate_data; FL_RAW_CALLBACK key_callback; FL_RAW_CALLBACK push_callback; FL_RAW_CALLBACK crossing_callback; FL_RAW_CALLBACK motion_callback; FL_RAW_CALLBACK all_callback; unsigned long compress_mask; unsigned long evmask; /* WM_DELETE_WINDOW message handler */ FL_FORM_ATCLOSE close_callback; void * close_data; FL_pixmap * flpixmap; /* back buffer */ Pixmap icon_pixmap; Pixmap icon_mask; /* Interaction and other flags */ int deactivated; /* non-zero if deactivated */ int use_pixmap; /* true if dbl buffering */ int frozen; /* true if sync change */ int visible; /* true if mapped */ int wm_border; /* window manager info */ unsigned int prop; /* other attributes */ int num_auto_objects; int needs_full_redraw; int sort_of_modal; /* internal use */ FL_FORM * parent; FL_FORM * child; FL_OBJECT * parent_obj; int attached; /* not independent anymore */ void ( * pre_attach )( FL_FORM * ); void * attach_data; int in_redraw; }; /* All FD_xxx structure emitted by fdesign contains at least the * following */ typedef struct { FL_FORM * form; void * vdata; char * cdata; long ldata; } FD_Any; /* Async IO stuff */ enum { FL_READ = 1, FL_WRITE = 2, FL_EXCEPT = 4 }; /* IO other than XEvent Q */ typedef void ( * FL_IO_CALLBACK )( int, void * ); FL_EXPORT void fl_add_io_callback( int fd, unsigned int mask, FL_IO_CALLBACK callback, void * data ); FL_EXPORT void fl_remove_io_callback( int fd, unsigned int mask, FL_IO_CALLBACK cb ); /* signals */ typedef void ( * FL_SIGNAL_HANDLER )( int, void * ); FL_EXPORT void fl_add_signal_callback( int s, FL_SIGNAL_HANDLER cb, void * data ); FL_EXPORT void fl_remove_signal_callback( int s ); FL_EXPORT void fl_signal_caught( int s ); FL_EXPORT void fl_app_signal_direct( int y ); enum { FL_INPUT_END_EVENT_CLASSIC = 0, FL_INPUT_END_EVENT_ALWAYS = 1 }; FL_EXPORT int fl_input_end_return_handling( int type ); /* Timeouts */ typedef void (* FL_TIMEOUT_CALLBACK )( int, void * ); FL_EXPORT int fl_add_timeout( long msec, FL_TIMEOUT_CALLBACK callback, void * data ); FL_EXPORT void fl_remove_timeout( int id ); /* Basic public routine prototypes */ FL_EXPORT int fl_library_version( int * ver, int * rev ); FL_EXPORT long fl_library_full_version( int * version, int * revision, int * fix_level, const char ** extra ); /** Generic routines that deal with FORMS **/ FL_EXPORT FL_FORM * fl_bgn_form( int type, FL_Coord w, FL_Coord h ); FL_EXPORT void fl_end_form( void ); FL_EXPORT FL_OBJECT * fl_do_forms( void ); FL_EXPORT FL_OBJECT * fl_check_forms( void ); FL_EXPORT FL_OBJECT * fl_do_only_forms( void ); FL_EXPORT FL_OBJECT * fl_check_only_forms( void ); FL_EXPORT void fl_freeze_form( FL_FORM * form ); FL_EXPORT void fl_set_focus_object( FL_FORM * form, FL_OBJECT * obj ); FL_EXPORT FL_OBJECT *fl_get_focus_object( FL_FORM * form ); FL_EXPORT void fl_reset_focus_object( FL_OBJECT * ob ); #define fl_set_object_focus fl_set_focus_object FL_EXPORT FL_FORM_ATCLOSE fl_set_form_atclose( FL_FORM * form, FL_FORM_ATCLOSE fmclose, void * data ); FL_EXPORT FL_FORM_ATCLOSE fl_set_atclose( FL_FORM_ATCLOSE fmclose, void * data ); FL_EXPORT FL_FORM_ATACTIVATE fl_set_form_atactivate( FL_FORM * form, FL_FORM_ATACTIVATE cb, void * data ); FL_EXPORT FL_FORM_ATDEACTIVATE fl_set_form_atdeactivate( FL_FORM * form, FL_FORM_ATDEACTIVATE cb, void * data ); FL_EXPORT void fl_unfreeze_form( FL_FORM * form ); FL_EXPORT int fl_form_is_activated( FL_FORM * form ); FL_EXPORT void fl_deactivate_form( FL_FORM * form ); FL_EXPORT void fl_activate_form( FL_FORM * form ); FL_EXPORT void fl_deactivate_all_forms( void ); FL_EXPORT void fl_activate_all_forms( void ); FL_EXPORT void fl_freeze_all_forms( void ); FL_EXPORT void fl_unfreeze_all_forms( void ); FL_EXPORT void fl_scale_form( FL_FORM * form, double xsc, double ysc ); FL_EXPORT void fl_set_form_position( FL_FORM * form, FL_Coord x, FL_Coord y ); FL_EXPORT void fl_set_form_title( FL_FORM * form, const char * name ); FL_EXPORT void fl_set_form_title_f( FL_FORM * form, const char * fmt, ... ); FL_EXPORT void fl_set_app_mainform( FL_FORM * form ); FL_EXPORT FL_FORM * fl_get_app_mainform( void ); FL_EXPORT void fl_set_app_nomainform( int flag ); FL_EXPORT void fl_set_form_callback( FL_FORM * form, FL_FORMCALLBACKPTR callback, void * d ); #define fl_set_form_call_back fl_set_form_callback FL_EXPORT void fl_set_form_size( FL_FORM * form, FL_Coord w, FL_Coord h ); FL_EXPORT void fl_set_form_background_color( FL_FORM * form, FL_COLOR color ); FL_EXPORT FL_COLOR fl_get_form_background_color( FL_FORM * form ); FL_EXPORT void fl_set_form_hotspot( FL_FORM * form, FL_Coord x, FL_Coord y ); FL_EXPORT void fl_set_form_hotobject( FL_FORM * form, FL_OBJECT * ob ); FL_EXPORT void fl_set_form_minsize( FL_FORM * form, FL_Coord w, FL_Coord h ); FL_EXPORT void fl_set_form_maxsize( FL_FORM * form, FL_Coord w, FL_Coord h ); FL_EXPORT void fl_set_form_event_cmask( FL_FORM * form, unsigned long cmask ); FL_EXPORT unsigned long fl_get_form_event_cmask( FL_FORM * form ); FL_EXPORT void fl_set_form_geometry( FL_FORM * form, FL_Coord x, FL_Coord y, FL_Coord w, FL_Coord h ); #define fl_set_initial_placement fl_set_form_geometry FL_EXPORT Window fl_show_form( FL_FORM * form, int place, int border, const char * name ); FL_EXPORT Window fl_show_form_f( FL_FORM * form, int place, int border, const char * fmt, ... ); FL_EXPORT void fl_hide_form( FL_FORM * form ); FL_EXPORT void fl_free_form( FL_FORM * form ); FL_EXPORT void fl_redraw_form( FL_FORM * form ); FL_EXPORT void fl_set_form_dblbuffer( FL_FORM * form, int y ); FL_EXPORT Window fl_prepare_form_window( FL_FORM * form, int place, int border, const char * name ); FL_EXPORT Window fl_prepare_form_window_f( FL_FORM * form, int place, int border, const char * fmt, ... ); FL_EXPORT Window fl_show_form_window( FL_FORM * form ); FL_EXPORT double fl_adjust_form_size( FL_FORM * form ); FL_EXPORT int fl_form_is_visible( FL_FORM * form ); FL_EXPORT int fl_form_is_iconified( FL_FORM * form ); FL_EXPORT FL_RAW_CALLBACK fl_register_raw_callback( FL_FORM * form, unsigned long mask, FL_RAW_CALLBACK rcb ); #define fl_register_call_back fl_register_raw_callback FL_EXPORT FL_OBJECT * fl_bgn_group( void ); FL_EXPORT void fl_end_group( void ); FL_EXPORT FL_OBJECT *fl_addto_group( FL_OBJECT * group ); /****** Routines that deal with FL_OBJECTS ********/ FL_EXPORT int fl_get_object_objclass( FL_OBJECT * obj ); FL_EXPORT int fl_get_object_type( FL_OBJECT * obj ); FL_EXPORT void fl_set_object_boxtype( FL_OBJECT * ob, int boxtype ); FL_EXPORT int fl_get_object_boxtype( FL_OBJECT * obj ); FL_EXPORT void fl_set_object_bw( FL_OBJECT * ob, int bw ); FL_EXPORT int fl_get_object_bw( FL_OBJECT * ob ); FL_EXPORT void fl_set_object_resize( FL_OBJECT * ob, unsigned int what ); FL_EXPORT void fl_get_object_resize( FL_OBJECT * ob, unsigned int * what ); FL_EXPORT void fl_set_object_gravity( FL_OBJECT * ob, unsigned int nw, unsigned int se ); FL_EXPORT void fl_get_object_gravity( FL_OBJECT * ob, unsigned int * nw, unsigned int * se ); FL_EXPORT void fl_set_object_lsize( FL_OBJECT * obj, int lsize ); FL_EXPORT int fl_get_object_lsize( FL_OBJECT * obj ); FL_EXPORT void fl_set_object_lstyle( FL_OBJECT * obj, int lstyle ); FL_EXPORT int fl_get_object_lstyle( FL_OBJECT * obj ); FL_EXPORT void fl_set_object_lcol( FL_OBJECT * ob, FL_COLOR lcol ); FL_EXPORT FL_COLOR fl_get_object_lcol( FL_OBJECT * obj ); FL_EXPORT int fl_set_object_return( FL_OBJECT * ob, unsigned int when ); FL_EXPORT void fl_set_object_lalign( FL_OBJECT * obj, int align ); FL_EXPORT int fl_get_object_lalign( FL_OBJECT * obj ); FL_EXPORT void fl_set_object_shortcut( FL_OBJECT * obj, const char * sstr, int showit ); FL_EXPORT void fl_set_object_shortcutkey( FL_OBJECT * obj, unsigned int keysym ); FL_EXPORT void fl_set_object_dblbuffer( FL_OBJECT * ob, int y ); FL_EXPORT void fl_set_object_color( FL_OBJECT * ob, FL_COLOR col1, FL_COLOR col2 ); FL_EXPORT void fl_get_object_color( FL_OBJECT * obj, FL_COLOR * col1, FL_COLOR * col2 ); FL_EXPORT void fl_set_object_label( FL_OBJECT * ob, const char * label ); FL_EXPORT void fl_set_object_label_f( FL_OBJECT * obj, const char * fmt, ... ); FL_EXPORT const char * fl_get_object_label( FL_OBJECT * obj ); FL_EXPORT void fl_set_object_helper( FL_OBJECT * ob, const char * tip ); FL_EXPORT void fl_set_object_helper_f( FL_OBJECT * ob, const char * fmt, ... ); FL_EXPORT void fl_set_object_position( FL_OBJECT * obj, FL_Coord x, FL_Coord y ); FL_EXPORT void fl_get_object_size( FL_OBJECT * obj, FL_Coord * w, FL_Coord * h ); FL_EXPORT void fl_set_object_size( FL_OBJECT * obj, FL_Coord w, FL_Coord h ); FL_EXPORT void fl_set_object_automatic( FL_OBJECT * obj, int flag ); FL_EXPORT int fl_object_is_automatic( FL_OBJECT * obj ); FL_EXPORT void fl_draw_object_label( FL_OBJECT * ob ); FL_EXPORT void fl_draw_object_label_outside( FL_OBJECT * ob ); FL_EXPORT FL_OBJECT * fl_get_object_component( FL_OBJECT * composite, int objclass, int type, int numb ); FL_EXPORT void fl_for_all_objects( FL_FORM * form, int ( * cb )( FL_OBJECT *, void * ), void * v ); #define fl_draw_object_outside_label fl_draw_object_label_outside FL_EXPORT void fl_set_object_dblclick( FL_OBJECT * obj, unsigned long timeout ); FL_EXPORT unsigned long fl_get_object_dblclick( FL_OBJECT * obj ); FL_EXPORT void fl_set_object_geometry( FL_OBJECT * obj, FL_Coord x, FL_Coord y, FL_Coord w, FL_Coord h ); FL_EXPORT void fl_move_object( FL_OBJECT * obj, FL_Coord dx, FL_Coord dy ); #define fl_set_object_lcolor fl_set_object_lcol #define fl_get_object_lcolor fl_get_object_lcol FL_EXPORT void fl_fit_object_label( FL_OBJECT * obj, FL_Coord xmargin, FL_Coord ymargin ); FL_EXPORT void fl_get_object_geometry( FL_OBJECT * ob, FL_Coord * x, FL_Coord * y, FL_Coord * w, FL_Coord * h ); FL_EXPORT void fl_get_object_position( FL_OBJECT * ob, FL_Coord * x, FL_Coord * y ); /* This one takes into account the label */ FL_EXPORT void fl_get_object_bbox( FL_OBJECT * obj, FL_Coord * x, FL_Coord * y, FL_Coord * w, FL_Coord * h ); #define fl_compute_object_geometry fl_get_object_bbox FL_EXPORT void fl_call_object_callback( FL_OBJECT * ob ); FL_EXPORT FL_HANDLEPTR fl_set_object_prehandler( FL_OBJECT * ob, FL_HANDLEPTR phandler ); FL_EXPORT FL_HANDLEPTR fl_set_object_posthandler( FL_OBJECT * ob, FL_HANDLEPTR post ); FL_EXPORT FL_CALLBACKPTR fl_set_object_callback( FL_OBJECT * obj, FL_CALLBACKPTR callback, long argument ); #define fl_set_object_align fl_set_object_lalign #define fl_set_call_back fl_set_object_callback FL_EXPORT void fl_redraw_object( FL_OBJECT * obj ); FL_EXPORT void fl_show_object( FL_OBJECT * ob ); FL_EXPORT void fl_hide_object( FL_OBJECT * ob ); FL_EXPORT int fl_object_is_visible( FL_OBJECT * obj ); FL_EXPORT void fl_free_object( FL_OBJECT * obj ); FL_EXPORT void fl_delete_object( FL_OBJECT * obj ); FL_EXPORT int fl_get_object_return_state( FL_OBJECT *obj ); FL_EXPORT void fl_trigger_object( FL_OBJECT * obj ); FL_EXPORT void fl_activate_object( FL_OBJECT * ob ); FL_EXPORT void fl_deactivate_object( FL_OBJECT * ob ); FL_EXPORT int fl_object_is_active( FL_OBJECT * obj ); FL_EXPORT int fl_enumerate_fonts( void ( * output )( const char * s ), int shortform ); FL_EXPORT int fl_set_font_name( int n, const char * name ); FL_EXPORT int fl_set_font_name_f( int n, const char * fmt, ... ); FL_EXPORT const char * fl_get_font_name( int n ); FL_EXPORT void fl_set_font( int numb, int size ); /* Routines that facilitate free object */ FL_EXPORT int fl_get_char_height( int style, int size, int * asc, int * desc ); FL_EXPORT int fl_get_char_width( int style, int size ); FL_EXPORT int fl_get_string_height( int style, int size, const char * s, int len, int * asc, int * desc ); FL_EXPORT int fl_get_string_width( int style, int size, const char * s, int len ); FL_EXPORT int fl_get_string_widthTAB( int style, int size, const char * s, int len ); FL_EXPORT void fl_get_string_dimension( int fntstyle, int fntsize, const char * s, int len, int * width, int * height ); #define fl_get_string_size fl_get_string_dimension FL_EXPORT void fl_get_align_xy( int align, int x, int y, int w, int h, int xsize, int ysize, int xoff, int yoff, int * xx, int * yy ); FL_EXPORT int fl_get_label_char_at_mouse( FL_OBJECT * obj ); FL_EXPORT void fl_drw_text( int align, FL_Coord x, FL_Coord y, FL_Coord w, FL_Coord h, FL_COLOR c, int style, int size, const char * istr ); FL_EXPORT void fl_drw_text_beside( int align, FL_Coord x, FL_Coord y, FL_Coord w, FL_Coord h, FL_COLOR c, int style, int size, const char * str ); FL_EXPORT void fl_drw_text_cursor( int align, FL_Coord x, FL_Coord y, FL_Coord w, FL_Coord h, FL_COLOR c, int style, int size, const char * str, int cc, int pos ); FL_EXPORT void fl_drw_box( int style, FL_Coord x, FL_Coord y, FL_Coord w, FL_Coord h, FL_COLOR c, int bw_in ); typedef void ( * FL_DRAWPTR )( FL_Coord, FL_Coord, FL_Coord, FL_Coord, int, FL_COLOR); FL_EXPORT int fl_add_symbol( const char * name, FL_DRAWPTR drawit, int scalable ); FL_EXPORT int fl_delete_symbol( const char * name ); FL_EXPORT int fl_draw_symbol( const char * label, FL_Coord x, FL_Coord y, FL_Coord w, FL_Coord h, FL_COLOR col ); FL_EXPORT unsigned long fl_mapcolor( FL_COLOR col, int r, int g, int b ); FL_EXPORT long fl_mapcolorname( FL_COLOR col, const char * name ); #define fl_mapcolor_name fl_mapcolorname FL_EXPORT void fl_free_colors( FL_COLOR * c, int n ); FL_EXPORT void fl_free_pixels( unsigned long * pix, int n ); FL_EXPORT void fl_set_color_leak( int y ); FL_EXPORT unsigned long fl_getmcolor( FL_COLOR i, int * r, int * g, int * b ); FL_EXPORT unsigned long fl_get_pixel( FL_COLOR col ); #define fl_get_flcolor fl_get_pixel FL_EXPORT void fl_get_icm_color( FL_COLOR col, int * r, int * g, int * b ); FL_EXPORT void fl_set_icm_color( FL_COLOR col, int r, int g, int b ); FL_EXPORT void fl_color( FL_COLOR col ); FL_EXPORT void fl_bk_color( FL_COLOR col ); FL_EXPORT void fl_set_gamma( double r, double g, double b ); FL_EXPORT void fl_show_errors( int y ); /* Some macros */ #define FL_max( a, b ) ( ( a ) > ( b ) ? ( a ) : ( b ) ) #define FL_min( a, b ) ( ( a ) < ( b ) ? ( a ) : ( b ) ) #define FL_abs( a ) ( ( a ) > 0 ? ( a ) : ( - ( a ) ) ) #define FL_nint( a ) ( ( int ) ( ( a ) > 0 ? \ ( ( a ) + 0.5 ) : \ ( ( a ) - 0.5 ) ) ) #define FL_clamp( a, amin, amax ) ( ( a ) < ( amin ) ? \ ( amin ) : ( ( a ) > ( amax ) ? \ ( amax ) : ( a ) ) ) #define FL_crnd( a ) ( ( FL_Coord ) ( ( a ) > 0 ? \ ( ( a ) + 0.5 ) : \ ( ( a ) - 0.5 ) ) ) typedef int ( * FL_FSCB )( const char *, void * ); /* Utilities for new objects */ FL_EXPORT FL_FORM *fl_current_form; FL_EXPORT void fl_add_object( FL_FORM * form, FL_OBJECT * obj ); FL_EXPORT FL_FORM *fl_addto_form( FL_FORM * form ); FL_EXPORT FL_OBJECT * fl_make_object( int objclass, int type, FL_Coord x, FL_Coord y, FL_Coord w, FL_Coord h, const char * label, FL_HANDLEPTR handle ); FL_EXPORT void fl_add_child( FL_OBJECT *, FL_OBJECT * ); FL_EXPORT void fl_set_coordunit( int u ); FL_EXPORT void fl_set_border_width( int bw ); FL_EXPORT void fl_set_scrollbar_type( int t ); #define fl_set_thinscrollbar( t ) \ fl_set_scrollbar_type( t ? FL_THIN_SCROLLBAR : FL_NORMAL_SCROLLBAR ) FL_EXPORT void fl_flip_yorigin( void ); FL_EXPORT int fl_get_coordunit( void ); FL_EXPORT int fl_get_border_width( void ); /* Misc. routines */ FL_EXPORT void fl_ringbell( int percent ); FL_EXPORT void fl_gettime( long * sec, long * usec ); FL_EXPORT const char * fl_now( void ); FL_EXPORT const char * fl_whoami( void ); FL_EXPORT long fl_mouse_button( void ); FL_EXPORT int fl_current_event( void ); FL_EXPORT char * fl_strdup( const char * s ); FL_EXPORT void fl_set_err_logfp( FILE * fp ); FL_EXPORT void fl_set_error_handler( FL_ERROR_FUNC user_func ); FL_EXPORT char ** fl_get_cmdline_args( int * ); /* This function was called 'fl_set_error_logfp/' in XForms 0.89. */ #define fl_set_error_logfp fl_set_err_logfp #define fl_mousebutton fl_mouse_button /* These give more flexibility for future changes. Also application * can re-assign these pointers to whatever function it wants, e.g., * to a shared memory pool allocator. */ FL_EXPORT void ( * fl_free )( void * ); FL_EXPORT void * ( * fl_malloc )( size_t ); FL_EXPORT void * ( * fl_calloc )( size_t, size_t ); FL_EXPORT void * ( * fl_realloc )( void *, size_t ); FL_EXPORT int fl_msleep( unsigned long msec ); #define FL_MAX_MENU_CHOICE_ITEMS 128 typedef const char * ( * FL_VAL_FILTER )( FL_OBJECT *, double, int ); FL_EXPORT int fl_is_same_object( FL_OBJECT * obj1, FL_OBJECT * obj2 ); #endif /* ! defined FL_BASIC_H */