1 /* 2 * This file is part of the XForms library package. 3 * 4 * XForms is free software; you can redistribute it and/or modify it 5 * under the terms of the GNU Lesser General Public License as 6 * published by the Free Software Foundation; either version 2.1, or 7 * (at your option) any later version. 8 * 9 * XForms is distributed in the hope that it will be useful, but 10 * WITHOUT ANY WARRANTY; without even the implied warranty of 11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 12 * Lesser General Public License for more details. 13 * 14 * You should have received a copy of the GNU Lesser General Public License 15 * along with XForms. If not, see <http://www.gnu.org/licenses/>. 16 */ 17 18 /** 19 * \file flinternal.h 20 * 21 * This file is part of the XForms library package. 22 * Copyright (c) 1996-1998 T.C. Zhao and Mark Overmars 23 * All rights reserved. 24 * 25 * Internal routines used by the Forms Library. An application should 26 * not use any of this since there is no guarantee that exactly some 27 * thing will exist in future versions of XForms. 28 */ 29 30 #ifndef FLINTERNAL_H 31 #define FLINTERNAL_H 32 33 #include <stdlib.h> 34 #include <signal.h> 35 #include "local.h" 36 #include "ulib.h" 37 38 39 /* macros and constants */ 40 41 /* FL_DEBUG controls some conditional compilations. Even if the code 42 * is compiled in, it still needs -debug level on the command line 43 * to activate the message output. FL_DEBUG less than ML_ERR probably 44 * is not a good idea. Only when making real production executables 45 * should FL_DEBUG be less than ML_ERR (say ML_ERR-1) 46 * 47 * ML_ERR -- print some error messages 48 * ML_WARN -- print some error messages 49 * ML_INFO1 -- some messages 50 * ML_INFO2 -- more messages 51 * ML_DEBUG -- debugging code compiled in 52 * ML_TRACE -- can be unbearable 53 */ 54 55 #ifndef FL_DEBUG 56 #define FL_DEBUG ML_WARN 57 #endif 58 59 60 /* Mask for all possible events */ 61 62 #define AllEventsMask ( ( OwnerGrabButtonMask << 1 ) - 1 ) 63 64 65 /* There are two ways to handle interaction. One is to process object 66 * Q only if there are no more event pending. This can result in 67 * an event entered into object Q more than once if the connection 68 * is slow and clicking is rapid. If subsequently the object is 69 * hidden or deleted/freed, problem occurs as the callback will 70 * still be processed. To fix this, need to flush the object Q 71 * when hiding/deleting objects. Also if an object is entered 72 * multiple times, and its status changed each time, when the 73 * Q is handled, we get wrong status. 74 * 75 * The other way to handle the interaction is to process object 76 * Q as soon as the status of the object is changed. This is 77 * the correct behavior. However, a change in status is typically 78 * preceeded by a redraw (say mouse release on button), and due to 79 * the X buffering mechnism, the redraw probably not get shown yet 80 * when the callback is evoked. To fix this, an explicit flush 81 * is needed. This can be time consuming. Also objects that do 82 * not have callbacks may be handled out of order (after the one's 83 * having callbacks). */ 84 85 #if 1 86 #define DELAYED_ACTION 87 #endif 88 89 90 /* If we want to have gamma correction as a built-in feature. 91 * Probably useless */ 92 93 #define DO_GAMMA_CORRECTION 94 95 96 /* XForms internal colormap */ 97 98 typedef struct { 99 const char * name; 100 FL_COLOR index; 101 unsigned short r; 102 unsigned short g; 103 unsigned short b; 104 unsigned short a; 105 int grayval; 106 } FLI_IMAP; 107 108 #define BadPixel FL_NoColor 109 110 #define Clamp( v, vmin, vmax ) ( ( v ) < ( vmin ) ? \ 111 ( vmin ) : ( ( v ) > ( vmax ) ? \ 112 ( vmax ) :( v ) ) ) 113 114 #define IsValidClass( o, c ) ( ( o ) && ( o )->objclass == ( c ) ) 115 116 #define fli_safe_free( p ) \ 117 do { if ( p ) { \ 118 fl_free( p ); \ 119 p = NULL; \ 120 } \ 121 } while( 0 ) 122 123 #define fli_class( i ) fl_state[ i ].vclass 124 #define fli_depth( i ) fl_state[ i ].depth 125 #define fli_visual( i ) fl_state[ i ].xvinfo->visual 126 #define fli_colormap( i ) fl_state[ i ].colormap 127 #define fli_map( i ) fl_state[ i ].colormap 128 #define fli_dithered( i ) fl_state[ i ].dithered 129 130 enum { 131 FLI_FIND_INPUT, 132 FLI_FIND_AUTOMATIC, 133 FLI_FIND_MOUSE, 134 FLI_FIND_CANVAS, 135 FLI_FIND_KEYSPECIAL, 136 FLI_FIND_RETURN 137 }; 138 139 /* events.c or event related */ 140 141 void fli_obj_queue_delete( void ); 142 143 void fli_event_queue_delete( void ); 144 145 void fli_object_qenter( FL_OBJECT *, 146 int ); 147 148 void fli_filter_returns( FL_OBJECT * ); 149 150 FL_OBJECT * fli_object_qread( void ); 151 152 void fli_object_qflush( FL_FORM * ); 153 154 void fli_object_qflush_object( FL_OBJECT * ); 155 156 FL_OBJECT *fli_object_qtest( void ); 157 158 void fli_treat_user_events( void ); 159 160 void fli_treat_interaction_events( int ); 161 162 void fli_compress_event( XEvent *, 163 unsigned long ); 164 165 const char *fli_event_name( int ); 166 167 XEvent * fli_xevent_name( const char *, 168 const XEvent * ); 169 170 void fli_handle_idling( XEvent * xev, 171 long msec, 172 int do_idle_cb ); 173 174 /* Variables defined in handling.c */ 175 176 extern FL_FORM * mouseform; /* the current form under mouse */ 177 extern FL_FORM * keyform; /* keyboard focus form */ 178 179 extern FL_OBJECT * fli_pushobj; 180 extern FL_OBJECT * fli_mouseobj; 181 182 extern FL_Coord fli_mousex, 183 fli_mousey; 184 extern unsigned int fli_keymask; 185 186 extern unsigned int fli_query_age; 187 188 189 /* Misc. utilitnes */ 190 191 FL_FORM * fli_find_event_form( XEvent * ); 192 193 void fli_print_version( int ); 194 195 /* from forms.c and object.c */ 196 197 void fli_scale_form( FL_FORM *, 198 double, 199 double ); 200 201 void fli_handle_form( FL_FORM *, 202 int, int, 203 XEvent * ); 204 205 FL_OBJECT *fli_end_group( void ); 206 207 void fli_handle_object( FL_OBJECT *, 208 int, 209 FL_Coord, 210 FL_Coord, 211 int, 212 XEvent *, 213 int ); 214 215 FL_OBJECT * fli_find_first( FL_FORM *, 216 int, 217 FL_Coord, 218 FL_Coord ); 219 220 void fli_show_object( FL_OBJECT * ); 221 222 void fli_recalc_intersections( FL_FORM * ); 223 224 FL_OBJECT * fli_find_last( FL_FORM *, 225 int, 226 FL_Coord, 227 FL_Coord ); 228 229 FL_OBJECT *fli_find_object( FL_OBJECT *, 230 int, 231 FL_Coord, 232 FL_Coord ); 233 234 FL_OBJECT *fli_find_object_backwards( FL_OBJECT *, 235 int, 236 FL_Coord, 237 FL_Coord ); 238 239 void fli_insert_object( FL_OBJECT *, 240 FL_OBJECT * ); 241 242 void fli_scale_object( FL_OBJECT *, 243 double , 244 double ); 245 246 void fli_set_object_visibility( FL_OBJECT * obj, 247 int vis ); 248 249 250 int fli_mouse_wheel_to_keypress( int * ev, 251 int * key, 252 void * xev ); 253 254 void fli_notify_object( FL_OBJECT * obj, 255 int reason ); 256 257 /* double buffering etc. */ 258 259 void fli_free_flpixmap( FL_pixmap * ); 260 261 void fli_create_object_pixmap( FL_OBJECT * ); 262 263 void fli_show_object_pixmap( FL_OBJECT * ); 264 265 void fli_create_form_pixmap( FL_FORM * ); 266 267 void fli_show_form_pixmap( FL_FORM * ); 268 269 /* windowing support */ 270 271 void fli_default_xswa( void ); 272 273 Window fli_cmap_winopen( Window, 274 Colormap, 275 const char * ); 276 277 Window fli_create_window( Window, 278 Colormap, 279 const char * ); 280 281 void fli_create_gc( Window ); 282 283 enum { 284 FLI_COMMAND_PROP = 1, 285 FLI_PROP_SET = ( 1 << 10 ) /* really set */ 286 }; 287 288 void fli_set_winproperty( Window, 289 unsigned int ); 290 291 /* graphics related */ 292 293 void fli_init_colormap( int ); 294 295 void fli_free_colormap( int ); 296 297 void fli_dump_state_info( int, 298 const char * ); 299 300 void fli_init_stipples( void ); 301 302 void fli_draw_button( FL_OBJECT * ); 303 304 /* for fdesign */ 305 306 const char * fli_query_colorname( FL_COLOR ); 307 308 long fli_query_namedcolor( const char *s ); 309 310 void fli_free_xtext_workmem( void ); 311 312 int fli_get_pos_in_string( int, 313 FL_Coord, 314 FL_Coord, 315 FL_Coord, 316 FL_Coord, 317 int, 318 int, 319 FL_Coord, 320 FL_Coord, 321 const char *, 322 int *, 323 int *, 324 int * ); 325 326 int fli_draw_stringTAB( Window, 327 GC, 328 int, 329 int, 330 int, 331 int, 332 const char *, 333 int, 334 int ); 335 336 int fli_draw_string( int, 337 FL_Coord, 338 FL_Coord, 339 FL_Coord, 340 FL_Coord, 341 int, 342 FL_COLOR, 343 FL_COLOR, 344 FL_COLOR, 345 int, 346 int, 347 int, 348 int, 349 int, 350 const char *, 351 int, 352 int, 353 int, 354 FL_COLOR ); 355 356 int fli_get_max_pixels_line( void ); 357 358 int fli_get_string_widthTABfs( XFontStruct *, 359 const char *, 360 int ); 361 362 void fli_init_font( void ); 363 364 void fli_canonicalize_rect( FL_Coord *, 365 FL_Coord *, 366 FL_Coord *, 367 FL_Coord * ); 368 369 void fli_get_goodie_title( FL_FORM *, 370 const char * ); 371 372 void fli_add_q_icon( FL_Coord, 373 FL_Coord, 374 FL_Coord, 375 FL_Coord ); 376 377 void fli_add_warn_icon( FL_Coord, 378 FL_Coord, 379 FL_Coord, 380 FL_Coord ); 381 382 void fli_check_key_focus( const char *, 383 Window ); 384 385 void fli_free_cmdline_args( void ); 386 387 FL_RECT * fli_get_underline_rect( XFontStruct *, 388 FL_Coord, 389 FL_Coord, 390 const char *, 391 int ); 392 393 394 /* Group some WM stuff into a structure for easy maintainance */ 395 396 typedef struct { 397 unsigned int pos_request; /* USPOSITION or PPOSITION */ 398 } FLI_WM_STUFF; 399 400 401 /* Routines in sldraw.c. */ 402 403 typedef struct { 404 FL_Coord x; 405 FL_Coord y; 406 FL_Coord w; 407 FL_Coord h; 408 } FLI_SCROLLBAR_KNOB; 409 410 enum { 411 FLI_SLIDER_NONE = 0, 412 FLI_SLIDER_BOX = 1, 413 FLI_SLIDER_KNOB = 2, 414 FLI_SLIDER_ALL = 3 415 }; 416 417 418 void fli_calc_slider_size( FL_OBJECT *, 419 FLI_SCROLLBAR_KNOB * ); 420 421 void fli_draw_slider( FL_OBJECT *, 422 FL_COLOR, 423 FL_COLOR, 424 const char *, 425 int ); 426 427 void fli_draw_checkbox( int type, 428 FL_Coord x, 429 FL_Coord y, 430 FL_Coord w, 431 FL_Coord h, 432 FL_COLOR col, 433 int bw ); 434 435 void fli_set_global_clipping( FL_Coord, 436 FL_Coord, 437 FL_Coord, 438 FL_Coord ); 439 440 void fli_unset_global_clipping( void ); 441 442 void fli_set_additional_clipping( FL_Coord, 443 FL_Coord, 444 FL_Coord, 445 FL_Coord ); 446 447 FL_RECT * fli_get_global_clip_rect( void ); 448 449 450 /* Application windows */ 451 452 typedef struct fli_win_ { 453 struct fli_win_ * next; 454 Window win; 455 FL_APPEVENT_CB pre_emptive; /* always gets called first if set */ 456 FL_APPEVENT_CB callback[ LASTEvent ]; 457 void * pre_emptive_data; 458 void * user_data[ LASTEvent ]; 459 FL_APPEVENT_CB default_callback; 460 unsigned long mask; 461 } FLI_WIN; 462 463 extern FLI_WIN * fl_app_win; 464 465 void fli_set_form_window( FL_FORM * ); 466 467 void fli_unmap_canvas_window( FL_OBJECT * ); 468 469 FL_APPEVENT_CB fli_set_preemptive_callback( Window, 470 FL_APPEVENT_CB, 471 void * ); 472 473 unsigned long fli_xevent_to_mask( int ); 474 475 int fli_initialize_program_visual( void ); 476 477 478 #define FLI_TIMER_RES 50 /* resolution of FL_STEP event */ 479 480 481 /* Currently only one idle procedure is permitted, so the next 482 * field is of no much use */ 483 484 typedef struct fli_idle_cb_ { 485 FL_APPEVENT_CB callback; 486 void * data; 487 } FLI_IDLE_REC; 488 489 typedef struct fli_io_event_ { 490 struct fli_io_event_ * next; 491 FL_IO_CALLBACK callback; 492 void * data; 493 unsigned int mask; 494 int source; 495 } FLI_IO_REC; 496 497 498 /* signals */ 499 500 #if ! defined HAVE_SIGACTION 501 typedef RETSIGTYPE ( * FLI_OSSIG_HANDLER )( int ); 502 #endif 503 504 typedef struct fli_signallist_ { 505 struct fli_signallist_ * next; 506 FL_SIGNAL_HANDLER callback; 507 #if defined HAVE_SIGACTION 508 struct sigaction old_sigact; 509 #else 510 FLI_OSSIG_HANDLER ocallback; /* default OS signal handler */ 511 #endif 512 void * data; 513 int signum; 514 int caught; 515 } FLI_SIGNAL_REC; 516 517 void fli_remove_all_signal_callbacks( void ); 518 519 /* timeouts */ 520 521 typedef struct fli_timeout_ { 522 int id; 523 struct fli_timeout_ * next; 524 struct fli_timeout_ * prev; 525 long start_sec, 526 start_usec; 527 long ms_to_wait; 528 FL_TIMEOUT_CALLBACK callback; 529 void * data; 530 } FLI_TIMEOUT_REC; 531 532 void fli_remove_all_timeouts( void ); 533 534 /* 535 * Intenal controls. 536 */ 537 538 typedef struct fli_context_ { 539 FL_FORM_ATCLOSE atclose; /* what to do if WM_DELETE_WINDOW */ 540 void * close_data; 541 FLI_IDLE_REC * idle_rec; /* idle callback record */ 542 FLI_IO_REC * io_rec; /* async IO record */ 543 FLI_SIGNAL_REC * signal_rec; /* list of app signals */ 544 FLI_TIMEOUT_REC * timeout_rec; /* timeout callbacks */ 545 int idle_delta; /* timer resolution */ 546 int last_event; /* last event received */ 547 long mouse_button; /* push/release record */ 548 int pup_id; /* current active pup id */ 549 FL_FORM * modal; /* current modal form */ 550 long max_request_size; /* max protocol size */ 551 int num_io; 552 int hscb, 553 vscb; /* default scrollbar */ 554 long ext_request_size; /* extended request size */ 555 int tooltip_time; 556 #ifdef XlibSpecificationRelease 557 XIM xim; /* input method */ 558 XIC xic; /* input context */ 559 #else 560 void * xim; 561 void * xic; 562 #endif 563 unsigned int navigate_mask; /* input field */ 564 long reserverd[ 6 ]; 565 } FLI_CONTEXT; 566 567 /* Some X info that helps to make the windowing system independent 568 * API work (fl_color() etc. */ 569 570 typedef struct { 571 Display * display; 572 Window win; 573 GC gc, 574 textgc; 575 GC miscgc; 576 int isRGBColor; 577 int isMBFont; /* multi-byte font */ 578 unsigned long bktextcolor; 579 int newpix; 580 int fdesc; /* font descent */ 581 int fasc; /* font ascent */ 582 int fheight; /* font height */ 583 Colormap colormap; 584 XFontStruct * fs; 585 unsigned long color; /* last color. cache */ 586 unsigned long textcolor; /* last textcolor. cache */ 587 unsigned long bkcolor; 588 int screen; 589 } FLI_TARGET; 590 591 592 typedef struct { 593 FL_FORM ** forms; /* all forms, visible and hidden */ 594 int formnumb; /* number of visible forms */ 595 int hidden_formnumb; /* number of hidden forms */ 596 size_t auto_count; 597 int unmanaged_count; 598 599 FL_Coord mousex, /* last recorded mouse position */ 600 mousey; 601 unsigned int keymask; /* state of buttons and modifier keys */ 602 unsigned int query_age; /* age of recorded information */ 603 604 FL_FORM * mouseform; /* the current form under the mouse */ 605 FL_FORM * keyform; /* keyboard focus form */ 606 607 FL_OBJECT * pushobj; /* latest pushed object */ 608 FL_OBJECT * mouseobj; /* object under the mouse */ 609 } FLI_INTERNAL; 610 611 extern FLI_INTERNAL fli_int; 612 613 614 void fli_init_context( void ); 615 616 617 #include "extern.h" 618 619 620 void fli_watch_io( FLI_IO_REC *, 621 long ); 622 623 int fli_do_shortcut( FL_FORM *, 624 int, 625 FL_Coord, 626 FL_Coord, 627 XEvent * ); 628 629 int fli_test_lalign( int align, 630 const char * txt ); 631 632 void fli_get_hv_align( int, 633 int *, 634 int * ); 635 636 void fli_get_outside_align( int, 637 int, 638 int, 639 int, 640 int, 641 int *, 642 int *, 643 int * ); 644 645 void fli_init_symbols( void ); 646 647 void fli_release_symbols( void ); 648 649 int fli_handle_event_callbacks( XEvent * ); 650 651 652 /* Some macros to test how an object can be moved or resized, depending on 653 its gravity settings (ULC = uppler left hand cornner, LRC = lower right 654 hand corner) */ 655 656 #define ULC_POS_LEFT_FIXED( obj ) \ 657 ( ( obj )->nwgravity == FL_NorthWest \ 658 || ( obj )->nwgravity == FL_West \ 659 || ( obj )->nwgravity == FL_SouthWest ) 660 661 #define ULC_POS_RIGHT_FIXED( obj ) \ 662 ( ( obj )->nwgravity == FL_NorthEast \ 663 || ( obj )->nwgravity == FL_East \ 664 || ( obj )->nwgravity == FL_SouthEast ) 665 666 #define LRC_POS_LEFT_FIXED( obj ) \ 667 ( ( obj )->segravity == FL_NorthWest \ 668 || ( obj )->segravity == FL_West \ 669 || ( obj )->segravity == FL_SouthWest ) 670 671 #define LRC_POS_RIGHT_FIXED( obj ) \ 672 ( ( obj )->segravity == FL_NorthEast \ 673 || ( obj )->segravity == FL_East \ 674 || ( obj )->segravity == FL_SouthEast ) 675 676 #define HAS_FIXED_HORI_ULC_POS( obj ) \ 677 ( ULC_POS_LEFT_FIXED( obj ) || ULC_POS_RIGHT_FIXED( obj ) ) 678 679 #define HAS_FIXED_HORI_LRC_POS( obj ) \ 680 ( LRC_POS_LEFT_FIXED( obj ) || LRC_POS_RIGHT_FIXED( obj ) ) 681 682 #define HAS_FIXED_WIDTH( obj ) \ 683 ( HAS_FIXED_HORI_ULC_POS( obj ) && HAS_FIXED_HORI_LRC_POS( obj ) ) 684 685 686 #define ULC_POS_TOP_FIXED( obj ) \ 687 ( ( obj )->nwgravity == FL_NorthWest \ 688 || ( obj )->nwgravity == FL_North \ 689 || ( obj )->nwgravity == FL_NorthEast ) 690 691 #define ULC_POS_BOTTOM_FIXED( obj ) \ 692 ( ( obj )->nwgravity == FL_SouthWest \ 693 || ( obj )->nwgravity == FL_South \ 694 || ( obj )->nwgravity == FL_SouthEast ) 695 696 #define LRC_POS_TOP_FIXED( obj ) \ 697 ( ( obj )->segravity == FL_NorthWest \ 698 || ( obj )->segravity == FL_North \ 699 || ( obj )->segravity == FL_NorthEast ) 700 701 #define LRC_POS_BOTTOM_FIXED( obj ) \ 702 ( ( obj )->segravity == FL_SouthWest \ 703 || ( obj )->segravity == FL_South \ 704 || ( obj )->segravity == FL_SouthEast ) 705 706 #define HAS_FIXED_VERT_ULC_POS( obj ) \ 707 ( ULC_POS_TOP_FIXED( obj ) || ULC_POS_BOTTOM_FIXED( obj ) ) 708 709 #define HAS_FIXED_VERT_LRC_POS( obj ) \ 710 ( LRC_POS_TOP_FIXED( obj ) || LRC_POS_BOTTOM_FIXED( obj ) ) 711 712 #define HAS_FIXED_HEIGHT( obj ) \ 713 ( HAS_FIXED_VERT_ULC_POS( obj ) && HAS_FIXED_VERT_LRC_POS( obj ) ) 714 715 716 717 #define XK_PageUp XK_Prior 718 #define XK_PageDn XK_Next 719 720 #define XK_PageUp XK_Prior 721 #define XK_PageDn XK_Next 722 723 724 /* some header has XK_XP_Left etc */ 725 726 #if XlibSpecificationRelease >= 6 727 728 #define IsHome( k ) ( k == XK_Home || k == XK_Begin || k == XK_KP_Home ) 729 #define IsLeft( k ) ( k == XK_Left || k == XK_KP_Left ) 730 #define IsRight( k ) ( k == XK_Right || k == XK_KP_Right ) 731 #define IsUp( k ) ( k == XK_Up || k == XK_KP_Up ) 732 #define IsDown( k ) ( k == XK_Down || k == XK_KP_Down ) 733 #define IsEnd( k ) ( k == XK_End || k == XK_KP_End ) 734 #define IsPageDown( k ) ( k == XK_Next || k == XK_Page_Down || k == XK_KP_Page_Down ) 735 #define IsPageUp( k ) ( k == XK_Prior || k == XK_Page_Up || k==XK_KP_Page_Up) 736 737 #else 738 739 #define IsHome( k ) ( k == XK_Home || k == XK_Begin ) 740 #define IsLeft( k ) ( k == XK_Left ) 741 #define IsRight( k ) ( k == XK_Right ) 742 #define IsDown( k ) ( k == XK_Down ) 743 #define IsUp( k ) ( k == XK_Up ) 744 #define IsEnd( k ) ( k == XK_End ) 745 #define IsPageDown( k ) ( k == XK_Next ) 746 #define IsPageUp( k ) ( k == XK_Prior ) 747 748 #endif 749 750 #define FLI_HALFPAGE_UP 0x10000000 751 #define FLI_HALFPAGE_DOWN 0x20000000 752 #define FLI_NLINES_UP 0x30000000 753 #define FLI_NLINES_DOWN 0x40000000 754 #define FLI_1LINE_UP 0x50000000 755 #define FLI_1LINE_DOWN 0x60000000 756 #define IsHalfPageUp( k ) ( ( k ) == FLI_HALFPAGE_UP ) 757 #define IsHalfPageDown( k ) ( ( k ) == FLI_HALFPAGE_DOWN ) 758 #define IsNLinesUp( k ) ( ( k ) == FLI_NLINES_UP ) 759 #define IsNLinesDown( k ) ( ( k ) == FLI_NLINES_DOWN ) 760 #define Is1LineUp( k ) ( ( k ) == FLI_1LINE_UP ) 761 #define Is1LineDown( k ) ( ( k ) == FLI_1LINE_DOWN ) 762 763 764 void fli_hide_and_get_region( FL_OBJECT *, 765 Region * ); 766 767 int fli_convert_shortcut( const char *, 768 long * ); 769 770 int fli_get_underline_pos( const char *, 771 const char * ); 772 773 int fli_get_visible_forms_index( FL_FORM * ); 774 775 void fli_recount_auto_objects( void ); 776 777 int fli_get_tabpixels( XFontStruct * ); 778 779 int fli_get_default_scrollbarsize( FL_OBJECT * ); 780 781 void fli_set_app_name( const char *, 782 const char * ); 783 784 void fli_hide_composite( FL_OBJECT *, 785 Region * ); 786 787 void fli_show_composite( FL_OBJECT * ); 788 789 void fli_deactivate_composite( FL_OBJECT * ); 790 791 void fli_activate_composite( FL_OBJECT * ); 792 793 void fli_delete_composite( FL_OBJECT * ob ); 794 795 void fli_free_composite( FL_OBJECT * ob ); 796 797 void fli_set_composite_gravity( FL_OBJECT *, 798 unsigned int, 799 unsigned int ); 800 801 void fli_set_composite_resize( FL_OBJECT *, 802 unsigned int ); 803 804 void fli_composite_has_been_resized( FL_OBJECT * ); 805 806 void fli_parse_goodies_label( FL_OBJECT *, 807 const char * ); 808 809 int fli_goodies_preemptive( FL_FORM *, 810 void * ); 811 812 void fli_get_goodies_font( int *, 813 int * ); 814 815 void fli_handle_goodie_font( FL_OBJECT *, 816 FL_OBJECT * ); 817 818 void fli_goodies_cleanup( void ); 819 820 void fli_msg_cleanup( void ); 821 822 void fli_alert_cleanup( void ); 823 824 void fli_choice_cleanup( void ); 825 826 void fli_question_cleanup( void ); 827 828 void fli_input_cleanup( void ); 829 830 void fli_sinput_cleanup( void ); 831 832 void fli_handle_timeouts( long * ); 833 834 #define FL_IS_NONSQRBOX( t ) ( t == FL_SHADOW_BOX \ 835 || t == FL_NO_BOX \ 836 || t == FL_RFLAT_BOX \ 837 || t == FL_ROUNDED_BOX \ 838 || t == FL_OVAL_BOX \ 839 || t == FL_ROUNDED3D_UPBOX \ 840 || t == FL_ROUNDED3D_DOWNBOX ) 841 842 enum { 843 FLI_TRIANGLE_UPBOX1, 844 FLI_TRIANGLE_UPBOX2, 845 FLI_TRIANGLE_UPBOX3, 846 FLI_TRIANGLE_UPBOX4, 847 FLI_TRIANGLE_UPBOX6, 848 FLI_TRIANGLE_UPBOX7, 849 FLI_TRIANGLE_UPBOX8, 850 FLI_TRIANGLE_UPBOX9, 851 FLI_TRIANGLE_DOWNBOX1, 852 FLI_TRIANGLE_DOWNBOX2, 853 FLI_TRIANGLE_DOWNBOX3, 854 FLI_TRIANGLE_DOWNBOX4, 855 FLI_TRIANGLE_DOWNBOX6, 856 FLI_TRIANGLE_DOWNBOX7, 857 FLI_TRIANGLE_DOWNBOX8, 858 FLI_TRIANGLE_DOWNBOX9 859 }; 860 861 FL_RECT * fli_intersect_rects( const FL_RECT *, 862 const FL_RECT * ); 863 864 void fli_xyplot_nice_label( float, 865 int, 866 float, 867 char * ); 868 869 void fli_xyplot_compute_data_bounds( FL_OBJECT *, 870 int *, 871 int *, 872 int ); 873 874 int fli_xyplot_interpolate( FL_OBJECT *, 875 int, 876 int, 877 int ); 878 879 void fli_insert_composite_after( FL_OBJECT *, 880 FL_OBJECT * ); 881 882 void fli_add_composite( FL_OBJECT * ); 883 884 void fli_insert_composite( FL_OBJECT *, 885 FL_OBJECT * ); 886 887 int fli_is_watched_io( int ); 888 889 const char * fli_object_class_name( FL_OBJECT * ); 890 891 char * fli_read_line( FILE * fp ); 892 893 char * fli_sstrcpy( char * dest, 894 const char * src, 895 size_t n ); 896 897 void fli_set_form_icon_data( FL_FORM *, 898 char ** ); 899 900 char *fli_getcwd( char *, 901 int ); 902 903 void fli_replacepup_text( int, 904 int, 905 const char * ); 906 907 int fli_valuator_handle_drag( FL_OBJECT *, 908 double ); 909 910 int fli_valuator_handle_release( FL_OBJECT *, 911 double ); 912 913 void *fli_init_valuator( FL_OBJECT * ); 914 915 double fli_valuator_round_and_clamp( FL_OBJECT *, 916 double ); 917 918 double fli_clamp( double, 919 double, 920 double ); 921 922 void fli_inherit_attributes( FL_OBJECT *, 923 FL_OBJECT * ); 924 925 int fli_boxtype2frametype( int ); 926 927 void fli_xvisual2flstate( FL_State *, 928 XVisualInfo * ); 929 930 int fli_find_closest_color( int, 931 int, 932 int, 933 XColor *, 934 int, 935 unsigned long * ); 936 937 void fli_rgbmask_to_shifts( unsigned long, 938 unsigned int *, 939 unsigned int * ); 940 941 void fli_show_tooltip( const char *, 942 int, 943 int ); 944 945 void fli_hide_tooltip( void ); 946 947 int fli_is_tooltip_form( FL_FORM * ); 948 949 void fli_do_radio_push( FL_OBJECT *, 950 FL_Coord, 951 FL_Coord, 952 int, 953 void *, 954 int ); 955 956 long fli_getpid( void ); 957 958 void fli_xlinestyle( Display *, 959 GC, 960 int ); 961 962 #define FLI_BROKEN_BOX ( 1 << 10 ) 963 964 FLI_TARGET * fli_internal_init( void ); 965 966 void fli_switch_target( FLI_TARGET * ); 967 968 void fli_restore_target( void ); 969 970 void fli_draw_text_inside( int align, 971 FL_Coord, 972 FL_Coord, 973 FL_Coord, 974 FL_Coord, 975 const char *, 976 int, 977 int, 978 FL_COLOR, 979 FL_COLOR, 980 int ); 981 982 /* Misc. stuff */ 983 984 void fli_add_vertex( FL_Coord x, 985 FL_Coord y ); 986 987 void fli_add_float_vertex( float x, 988 float y ); 989 990 void fli_reset_vertex( void ); 991 992 void fli_endpolygon( void ); 993 994 void fli_endclosedline( void ); 995 996 void fli_endline( void ); 997 998 const char * fli_get_xevent_name( const XEvent * ); 999 1000 void fli_set_input_navigate( unsigned int mask ); 1001 1002 void fli_adjust_browser_scrollbar( FL_OBJECT * ); 1003 1004 FL_POPUP * fli_popup_add( Window, 1005 const char *, 1006 const char * ); 1007 1008 FL_POPUP_ENTRY * fli_popup_add_entries( FL_POPUP *, 1009 const char *, 1010 va_list, 1011 const char *, 1012 int ); 1013 1014 FL_POPUP_ENTRY * fli_popup_insert_entries( FL_POPUP *, 1015 FL_POPUP_ENTRY *, 1016 const char *, 1017 va_list, 1018 const char *, 1019 int ); 1020 1021 FL_POPUP_ENTRY * fli_popup_insert_items( FL_POPUP *, 1022 FL_POPUP_ENTRY *, 1023 FL_POPUP_ITEM *, 1024 const char * ); 1025 1026 void fli_popup_init( void ); 1027 1028 void fli_popup_finish( void ); 1029 1030 int fli_check_popup_exists( FL_POPUP * ); 1031 1032 int fli_check_popup_entry_exists( FL_POPUP_ENTRY * ); 1033 1034 FL_POPUP_RETURN * fli_set_popup_return( FL_POPUP_ENTRY * ); 1035 1036 void fli_popup_reset_counter( FL_POPUP * ); 1037 1038 void fli_free_cursors( void ); 1039 1040 void fli_free_fselectors( void ); 1041 1042 1043 /* Some utility stuff */ 1044 1045 typedef struct { 1046 int val; 1047 const char * name; 1048 } FLI_VN_PAIR; 1049 1050 int fli_get_vn_value( FLI_VN_PAIR * vn_pair, 1051 const char * name ); 1052 1053 const char * fli_get_vn_name( FLI_VN_PAIR * vn_pair, 1054 int val ); 1055 1056 #if XlibSpecificationRelease == 6 1057 1058 # define IsTab( ksym ) ( ksym == XK_ISO_Left_Tab || ksym== XK_Tab ) 1059 1060 #else 1061 1062 # define IsTab( ksym ) ( ksym == XK_Tab ) 1063 1064 #endif 1065 1066 void fli_set_tab_color( FL_OBJECT * obj, 1067 FL_COLOR col1, 1068 FL_COLOR col2 ); 1069 1070 void fli_set_tab_lcolor( FL_OBJECT * obj, 1071 FL_COLOR lcol ); 1072 1073 void fli_set_tab_lsize( FL_OBJECT * obj, 1074 int lsize ); 1075 1076 void fli_set_tab_lstyle( FL_OBJECT * obj, 1077 int lstyle ); 1078 1079 void fli_set_tab_lalign( FL_OBJECT * obj, 1080 int align ); 1081 1082 void fli_set_tab_bw( FL_OBJECT * obj, 1083 int bw ); 1084 void fli_textcolor( FL_COLOR col ); 1085 1086 void fli_bk_textcolor( FL_COLOR col ); 1087 1088 char * fli_fix_dirname( char * dir ); 1089 1090 Cursor fli_get_cursor_byname( int name ); 1091 1092 void fli_hide_canvas( FL_OBJECT * ob ); 1093 1094 const char * fli_vclass_name( int n ); 1095 1096 int fli_vclass_val( const char * v ); 1097 1098 void fli_set_ul_property( int prop, 1099 int thickness ); 1100 1101 int fli_is_valid_dir( const char * name ); 1102 1103 #endif /* ! defined FL_INTERNAL_H */ 1104 1105 1106 /* 1107 * Local variables: 1108 * tab-width: 4 1109 * indent-tabs-mode: nil 1110 * End: 1111 */ 1112