1 /* 2 * Here are some conventions about our Tk widgets. 3 * 4 * When a widget is packed, its act geom record is 5 * set so that act.{x,y} is the vector from the containing 6 * widget's origin to the position of this widget. The position 7 * is the place just outside the top-left border. The origin 8 * is the place just inside the top-left border. 9 * act.{width,height} gives the allocated dimensions inside 10 * the border --- it will be the requested width or height 11 * plus ipad{x,y} plus any filling done by the packer. 12 * 13 * The tkposn function returns the origin of its argument 14 * widget, expressed in absolute screen coordinates. 15 * 16 * The actual drawing contents of the widget should be 17 * drawn at an internal origin that is the widget's origin 18 * plus the ipad vector. 19 */ 20 21 /* 22 * event printing 23 */ 24 #pragma varargck type "v" int 25 #pragma varargck argpos tkwreq 2 26 27 enum 28 { 29 TKframe, /* Widget type */ 30 TKlabel, 31 TKcheckbutton, 32 TKbutton, 33 TKmenubutton, 34 TKmenu, 35 TKseparator, 36 TKcascade, 37 TKlistbox, 38 TKscrollbar, 39 TKtext, 40 TKcanvas, 41 TKentry, 42 TKradiobutton, 43 TKscale, 44 TKpanel, 45 TKchoicebutton, 46 TKwidgets, 47 48 TKsingle = 0, /* Select mode */ 49 TKbrowse, 50 TKmultiple, 51 TKextended, 52 53 TKraised, /* Relief */ 54 TKsunken, 55 TKflat, 56 TKgroove, 57 TKridge, 58 59 TkArepl = 0, /* Bind options */ 60 TkAadd, 61 TkAsub, 62 63 Tkvertical = 0, /* Scroll bar orientation */ 64 Tkhorizontal, 65 66 Tkwrapnone = 0, /* Wrap mode */ 67 Tkwrapword, 68 Tkwrapchar, 69 70 TkDdelivered = 0, /* Event Delivery results */ 71 TkDbreak, 72 TkDnone, 73 74 TkLt = 0, /* Comparison operators */ 75 TkLte, 76 TkEq, 77 TkGte, 78 TkGt, 79 TkNeq, 80 81 82 OPTdist = 0, /* Distance; aux is offset of TkEnv* */ 83 OPTstab, /* String->Constant table; aux is TkStab array */ 84 OPTtext, /* Text string */ 85 OPTwinp, /* Window Path to Tk ptr */ 86 OPTflag, /* Option sets bitmask; aux is TkStab array*/ 87 OPTbmap, /* Option specifies bitmap file */ 88 OPTbool, /* Set to one if option present */ 89 OPTfont, /* Env font */ 90 OPTfrac, /* list of fixed point distances (count in aux) */ 91 OPTnnfrac, /* non-negative fixed point distance */ 92 OPTctag, /* Tag list for canvas item */ 93 OPTtabs, /* Tab stops; aux is offset of TkEnv* */ 94 OPTcolr, /* Colors; aux is index into colour table */ 95 OPTimag, /* Image */ 96 OPTsize, /* width/height; aux is offset of TkEnv* */ 97 OPTnndist, /* Non-negative distance */ 98 OPTact, /* actx or acty */ 99 OPTignore, /* ignore this option */ 100 OPTsticky, /* sticky (any comb. of chars n, s, e, w) */ 101 OPTlist, /* list of text values */ 102 OPTflags, /* more than one OPTflag */ 103 104 BoolX = 0, 105 BoolT, 106 BoolF, 107 108 Tkmaxitem = 128, 109 Tkminitem = 32, 110 Tkcvstextins = 1024, 111 Tkmaxdump = 1024, 112 Tkentryins = 128, 113 TkMaxmsgs = 100, 114 Tkshdelta = 0x40, /* color intensity delta for shading */ 115 116 Tkfpscalar = 10000, /* Fixed point scale factor */ 117 118 Tkdpi = 100, /* pixels per inch on an average display */ 119 120 Tksweep = 64, /* binds before a sweep */ 121 122 TkColcachesize = 128, /* colours cached per context (display) */ 123 124 TkStatic = 0, 125 TkDynamic = 1, 126 127 TkRptclick = 100, /* granularity */ 128 TkRptpause = 300, /* autorepeat inital delay */ 129 TkRptinterval = 100, /* autorepeat interval */ 130 131 TkBlinkinterval = 500 132 }; 133 134 #define TKSTRUCTALIGN 4 135 #define TKI2F(i) ((i)*Tkfpscalar) 136 extern int TKF2I(int); 137 /*#define TKF2I(f) (((f) + Tkfpscalar/2)/Tkfpscalar)*/ 138 #define IAUX(i) ((void*)i) 139 #define AUXI(i) ((int)i) 140 #define TKKEY(i) ((i)&0xFFFF) 141 142 typedef struct Tk Tk; 143 typedef struct TkCol TkCol; 144 typedef struct TkCtxt TkCtxt; 145 typedef struct TkEnv TkEnv; 146 typedef struct TkName TkName; 147 typedef struct TkTtabstop TkTtabstop; 148 typedef struct TkOptab TkOptab; 149 typedef struct TkOption TkOption; 150 typedef struct TkStab TkStab; 151 typedef struct TkTop TkTop; 152 typedef struct TkGeom TkGeom; 153 typedef struct TkMethod TkMethod; 154 typedef struct TkAction TkAction; 155 typedef struct TkWin TkWin; 156 typedef struct TkCmdtab TkCmdtab; 157 typedef struct TkMemimage TkMemimage; 158 typedef struct TkMouse TkMouse; 159 typedef struct TkVar TkVar; 160 typedef struct TkMsg TkMsg; 161 typedef struct TkEbind TkEbind; 162 typedef struct TkImg TkImg; 163 typedef struct TkPanelimage TkPanelimage; 164 typedef struct TkWinfo TkWinfo; 165 typedef struct TkCursor TkCursor; 166 typedef struct TkGrid TkGrid; 167 typedef struct TkGridbeam TkGridbeam; 168 typedef struct TkGridcell TkGridcell; 169 170 #pragma incomplete TkCol 171 172 struct TkImg 173 { 174 TkTop* top; 175 int ref; 176 int type; 177 int w; 178 int h; 179 TkEnv* env; 180 Image* img; 181 TkImg* link; 182 TkName* name; 183 char *cursor; 184 }; 185 186 struct TkCursor 187 { 188 int def; 189 Point p; 190 Image* bit; 191 TkImg* img; 192 }; 193 194 struct TkEbind 195 { 196 int event; 197 char* cmd; 198 }; 199 200 struct TkMsg 201 { 202 TkVar* var; 203 TkMsg* link; 204 char msg[TKSTRUCTALIGN]; 205 }; 206 207 enum 208 { 209 TkVchan = 1, 210 TkVstring, 211 }; 212 213 struct TkVar 214 { 215 int type; 216 TkVar* link; 217 void* value; 218 char name[TKSTRUCTALIGN]; 219 }; 220 221 struct TkPanelimage 222 { 223 void* image; /* Image paired with Draw_Image: see lookupimage in libinterp/draw.c */ 224 int ref; 225 TkPanelimage* link; 226 }; 227 228 struct TkMouse 229 { 230 int x; 231 int y; 232 int b; 233 }; 234 235 struct TkMemimage 236 { 237 Rectangle r; 238 ulong chans; 239 uchar* data; 240 }; 241 242 struct TkCmdtab 243 { 244 char* name; 245 char* (*fn)(Tk*, char*, char**); 246 }; 247 248 struct TkWinfo 249 { 250 Tk* w; 251 Rectangle r; 252 }; 253 254 struct TkAction 255 { 256 int event; 257 int type; 258 char* arg; 259 TkAction* link; 260 }; 261 262 struct TkStab 263 { 264 char* val; 265 int con; 266 }; 267 268 struct TkOption 269 { 270 char* o; 271 int type; 272 int offset; 273 void* aux; 274 }; 275 276 struct TkOptab 277 { 278 void* ptr; 279 TkOption* optab; 280 }; 281 282 enum 283 { 284 /* Widget Control Bits */ 285 Tktop = (1<<0), 286 Tkbottom = (1<<1), 287 Tkleft = (1<<2), 288 Tkright = (1<<3), 289 Tkside = Tktop|Tkbottom|Tkleft|Tkright, 290 Tkfillx = (1<<4), 291 Tkfilly = (1<<5), 292 Tkfill = Tkfillx|Tkfilly, 293 Tkexpand = (1<<6), 294 Tkrefresh = (1<<7), 295 Tknoprop = (1<<8), 296 Tkbaseline = (1<<10), 297 Tknumeric = (1<<11), 298 299 Tknorth = (1<<10), 300 Tkeast = (1<<11), 301 Tksouth = (1<<12), 302 Tkwest = (1<<13), 303 Tkcenter = 0, 304 Tkanchor = Tknorth|Tkeast|Tksouth|Tkwest, 305 Tksuspended = (1<<14), /* window suspended pending resize */ 306 307 Tkgridpack = (1<<17), /* temporary flag marking addition to grid */ 308 Tkgridremove = (1<<18), /* marked for removal from grid */ 309 Tktakefocus = (1<<19), 310 Tktransparent = (1<<20), /* Doesn't entirely obscure its background */ 311 Tkwindow = (1<<21), /* Top level window */ 312 Tkactive = (1<<22), /* Pointer is over active object */ 313 Tkactivated = (1<<23), /* Button pressed etc.. */ 314 Tkdisabled = (1<<24), /* Button is not accepting events */ 315 Tkmapped = (1<<25), /* Mapped onto display */ 316 Tknograb = (1<<26), 317 Tkdestroy = (1<<27), /* Marked for death */ 318 Tksetwidth = (1<<28), 319 Tksetheight = (1<<29), 320 Tksubsub = (1<<30), 321 Tkswept = (1<<31), 322 323 /* Supported Event Types */ 324 /* 325 * Bits 0-15 are keyboard characters 326 * but duplicated by other events, as we can distinguish 327 * key events from others with the TkKey bit. 328 * N.B. make sure that this distinction *is* made; 329 * i.e. 330 * if (event & TkButton1P) 331 * is no longer sufficient to test for button1 down. 332 * 333 * if (!(event & TkKey) && (event & TkButton1P)) 334 * would be better. 335 */ 336 TkButton1P = (1<<0), 337 TkButton1R = (1<<1), 338 TkButton2P = (1<<2), 339 TkButton2R = (1<<3), 340 TkButton3P = (1<<4), 341 TkButton3R = (1<<5), 342 TkButton4P = (1<<6), 343 TkButton4R = (1<<7), 344 TkButton5P = (1<<8), 345 TkButton5R = (1<<9), 346 TkButton6P = (1<<10), 347 TkButton6R = (1<<11), 348 /* 349 * 12-15 reserved for more buttons. 350 */ 351 TkExtn1 = (1<<16), 352 TkExtn2 = (1<<17), 353 TkTakefocus = (1<<18), 354 /* 355 * 19-20 currently free 356 */ 357 TkDestroy = (1<< 21), 358 TkEnter = (1<<22), 359 TkLeave = (1<<23), 360 TkMotion = (1<<24), 361 TkMap = (1<<25), 362 TkUnmap = (1<<26), 363 TkKey = (1<<27), 364 TkFocusin = (1<<28), 365 TkFocusout = (1<<29), 366 TkConfigure = (1<<30), 367 TkDouble = (1<<31), 368 TkEmouse = TkButton1P|TkButton1R|TkButton2P|TkButton2R| 369 TkButton3P|TkButton3R| 370 TkButton4P|TkButton4R| 371 TkButton5P|TkButton5R| 372 TkButton6P|TkButton6R|TkMotion, 373 TkEpress = TkButton1P|TkButton2P|TkButton3P| 374 TkButton4P|TkButton5P|TkButton6P, 375 TkErelease = TkButton1R|TkButton2R|TkButton3R| 376 TkButton4R|TkButton5R|TkButton6R, 377 TkExtns = TkExtn1|TkExtn2, 378 TkAllEvents = ~0, 379 380 TkCforegnd = 0, 381 TkCbackgnd, /* group of 3 */ 382 TkCbackgndlght, 383 TkCbackgnddark, 384 TkCselect, 385 TkCselectbgnd, /* group of 3 */ 386 TkCselectbgndlght, 387 TkCselectbgnddark, 388 TkCselectfgnd, 389 TkCactivebgnd, /* group of 3 */ 390 TkCactivebgndlght, 391 TkCactivebgnddark, 392 TkCactivefgnd, 393 TkCdisablefgnd, 394 TkChighlightfgnd, 395 TkCfill, 396 TkCtransparent, 397 398 TkNcolor, 399 400 TkSameshade = 0, /* relative shade for tkgshade() and tkrgbashade()*/ 401 TkLightshade, 402 TkDarkshade 403 }; 404 405 406 struct TkEnv 407 { 408 int ref; 409 TkTop* top; /* Owner */ 410 ulong set; 411 ulong colors[TkNcolor]; /* OPTcolr */ 412 Font* font; /* Font description */ 413 int wzero; /* Width of "0" in pixel */ 414 }; 415 416 struct TkGeom 417 { 418 int x; 419 int y; 420 int width; 421 int height; 422 }; 423 424 struct TkGridbeam 425 { 426 int equalise; 427 int minsize; 428 int maxsize; 429 int weight; 430 int pad; 431 int act; 432 char* name; 433 }; 434 435 struct TkGridcell 436 { 437 Tk* tk; 438 Point span; 439 }; 440 441 struct TkGrid 442 { 443 TkGridcell** cells; /* 2D array of cells, y major, x minor */ 444 Point dim; /* dimensions of table */ 445 TkGridbeam* rows; 446 TkGridbeam* cols; 447 Point origin; /* top left point grid was rendered at */ 448 }; 449 450 struct Tk 451 { 452 int type; /* Widget type */ 453 TkName* name; /* Hierarchy name */ 454 Tk* siblings; /* Link to descendents */ 455 Tk* master; /* Pack owner */ 456 Tk* slave; /* Packer slaves */ 457 Tk* next; /* Link for packer slaves */ 458 Tk* parent; /* Window is sub of this canvas or text */ 459 Tk* depth; /* Window depth when mapped */ 460 void (*geom)(Tk*, int, int, int, int); /* Geometry change notify function */ 461 void (*destroyed)(Tk*); /* Destroy notify function */ 462 int flag; /* Misc flags. */ 463 TkEnv* env; /* Colors & fonts */ 464 TkAction* binds; /* Binding of current events */ 465 466 TkGeom req; /* Requested size and position */ 467 TkGeom act; /* Actual size and position */ 468 int relief; /* 3D border type */ 469 int borderwidth; /* 3D border size */ 470 int highlightwidth; 471 Point pad; /* outside frame padding */ 472 Point ipad; /* inside frame padding */ 473 Rectangle dirty; /* dirty rectangle, relative to widget */ 474 TkGrid* grid; /* children are packed in a grid */ 475 476 /* followed by widget-dependent data */ 477 }; 478 479 struct TkWin 480 { 481 Image* image; 482 Tk* next; 483 Point act; 484 Point req; 485 void* di; /* !=H if it's been set externally */ 486 int changed; /* requested rect has changed since request sent */ 487 int reqid; /* id of request most recently sent out; replies to earlier requests are ignored */ 488 489 /* menu specific members */ 490 Tk* slave; 491 char* postcmd; 492 char* cascade; 493 int freeonunmap; 494 char *cbname; /* name of choicebutton that posted this */ 495 496 Point delta; 497 int speed; 498 int waiting; 499 }; 500 501 struct TkMethod 502 { 503 char* name; 504 TkCmdtab* cmd; 505 void (*free)(Tk*); 506 char* (*draw)(Tk*, Point); 507 void (*geom)(Tk*); 508 void (*getimgs)(Tk*, Image**, Image**); 509 510 void (*focusorder)(Tk*); /* add any focusable descendants to the focus order */ 511 void (*dirtychild)(Tk*); /* Child notifies parent to redraw */ 512 Point (*relpos)(Tk*); 513 Tk* (*deliver)(Tk*, int, void*); 514 void (*see)(Tk*, Rectangle*, Point*); 515 Tk* (*inwindow)(Tk*, Point*); 516 void (*varchanged)(Tk*, char*, char*); 517 void (*forgetsub)(Tk*, Tk*); 518 int ncmd; 519 }; 520 521 struct TkName 522 { 523 TkName* link; 524 void* obj; /* Name for ... */ 525 union { 526 TkAction* binds; 527 }prop; /* Properties for ... */ 528 int ref; 529 char name[TKSTRUCTALIGN]; 530 }; 531 532 struct TkTtabstop 533 { 534 int pos; 535 int justify; 536 TkTtabstop* next; 537 }; 538 539 struct TkCtxt 540 { 541 void* lock; 542 Display* display; 543 int ncol; 544 TkCol* chead; 545 TkCol* ctail; 546 Image* i; /* temporary image for drawing buttons, etc */ 547 Image* ia; /* as above, but with an alpha channel */ 548 Tk* tkkeygrab; 549 550 int focused; 551 Tk* mfocus; 552 Tk* mgrab; 553 Tk* entered; 554 TkMouse mstate; 555 556 Tk* tkmenu; 557 void* extn; 558 }; 559 560 struct TkTop 561 { 562 void* dd; /* really Draw_Display */ 563 void* wreq; /* really chan of string */ 564 void* di; /* really Draw_Image* */ 565 void* wmctxt; /* really Draw_Wmcontext */ 566 Rectangle screenr; /* XXX sleazy equiv to Draw_Rect, but what else? */ 567 568 /* Private from here on */ 569 TkCtxt* ctxt; 570 Display* display; 571 Tk* root; /* list of all objects, linked by siblings; first object is "." */ 572 Tk* windows; 573 Tk** focusorder; 574 int nfocus; 575 TkEnv* env; 576 TkTop* link; 577 TkVar* vars; 578 TkImg* imgs; 579 TkPanelimage* panelimages; 580 TkAction* binds[TKwidgets]; 581 int debug; 582 int execdepth; 583 char focused; 584 char dirty; 585 char noupdate; 586 char* err; 587 char errcmd[32]; 588 char errx[32]; 589 }; 590 591 #define TKobj(t, p) ((t*)((p)+1)) 592 //#define TKobj(t, p) ((t*)(p->obj)) 593 #define OPTION(p, t, o) (*(t*)((char*)p + o)) 594 595 /* Command entry points */ 596 extern char* tkbind(TkTop*, char*, char**); 597 extern char* tkbutton(TkTop*, char*, char**); 598 extern char* tkcanvas(TkTop*, char*, char**); 599 extern char* tkcheckbutton(TkTop*, char*, char**); 600 extern char* tkchoicebutton(TkTop*, char*, char**); 601 extern char* tkcursorcmd(TkTop*, char*, char**); 602 extern char* tkdestroy(TkTop*, char*, char**); 603 extern char* tkentry(TkTop*, char*, char**); 604 extern char* tkfocus(TkTop*, char*, char**); 605 extern char* tkframe(TkTop*, char*, char**); 606 extern char* tkgrab(TkTop*, char*, char**); 607 extern char* tkgrid(TkTop*, char*, char**); 608 extern char* tkimage(TkTop*, char*, char**); 609 extern char* tklabel(TkTop*, char*, char**); 610 extern char* tklistbox(TkTop*, char*, char**); 611 extern char* tklower(TkTop*, char*, char**); 612 extern char* tkmenu(TkTop*, char*, char**); 613 extern char* tkmenubutton(TkTop*, char*, char**); 614 extern char* tkpack(TkTop*, char*, char**); 615 extern char* tkpanel(TkTop*, char*, char**); 616 extern char* tkputs(TkTop*, char*, char**); 617 extern char* tkradiobutton(TkTop*, char*, char**); 618 extern char* tkraise(TkTop*, char*, char**); 619 extern char* tkscale(TkTop*, char*, char**); 620 extern char* tkscrollbar(TkTop*, char*, char**); 621 extern char* tksend(TkTop*, char*, char**); 622 extern char* tktext(TkTop*, char*, char**); 623 extern char* tkupdatecmd(TkTop*, char*, char**); 624 extern char* tkvariable(TkTop*, char*, char**); 625 extern char* tkwinfo(TkTop*, char*, char**); 626 627 extern TkMethod *tkmethod[]; 628 629 /* Errors - xdata.c*/ 630 extern char TkNomem[]; 631 extern char TkBadop[]; 632 extern char TkOparg[]; 633 extern char TkBadvl[]; 634 extern char TkBadwp[]; 635 extern char TkNotop[]; 636 extern char TkDupli[]; 637 extern char TkNotpk[]; 638 extern char TkBadcm[]; 639 extern char TkIstop[]; 640 extern char TkBadbm[]; 641 extern char TkBadft[]; 642 extern char TkBadit[]; 643 extern char TkBadtg[]; 644 extern char TkFewpt[]; 645 extern char TkBadsq[]; 646 extern char TkBadix[]; 647 extern char TkNotwm[]; 648 extern char TkWpack[]; 649 extern char TkBadvr[]; 650 extern char TkNotvt[]; 651 extern char TkMovfw[]; 652 extern char TkBadsl[]; 653 extern char TkSyntx[]; 654 extern char TkRecur[]; 655 extern char TkDepth[]; 656 extern char TkNomaster[]; 657 extern char TkNotgrid[]; 658 extern char TkIsgrid[]; 659 extern char TkBadgridcell[]; 660 extern char TkBadspan[]; 661 extern char TkBadcursor[]; 662 663 /* Option tables - xdata.c */ 664 extern TkStab tkanchor[]; 665 extern TkStab tkbool[]; 666 extern TkStab tkcolortab[]; 667 extern TkStab tkjustify[]; 668 extern TkStab tkorient[]; 669 extern TkStab tkrelief[]; 670 extern TkStab tktabjust[]; 671 extern TkStab tkwrap[]; 672 extern TkOption tkgeneric[]; 673 extern TkOption tktop[]; 674 extern TkOption tktopdbg[]; 675 676 /* panel.c */ 677 extern void tkgetpanelimage(Tk*, Image**, Image**); 678 extern void tksetpanelimage(Tk *tk, Image*, Image*); 679 680 /* General - colrs.c */ 681 extern void tksetenvcolours(TkEnv*); 682 683 /* General - ebind.c */ 684 extern void tkcmdbind(Tk*, int, char*, void*); 685 extern TkCtxt* tkdeldepth(Tk*); 686 extern char* tkdestroy(TkTop*, char*, char**); 687 extern char* tkbindings(TkTop*, Tk*, TkEbind*, int); 688 extern int tkseqparse(char*); 689 extern void tksetkeyfocus(TkTop*, Tk*, int); 690 extern void tksetglobalfocus(TkTop*, int); 691 692 /* General - image.c */ 693 extern TkImg* tkname2img(TkTop*, char*); 694 extern void tkimgput(TkImg*); 695 extern void tksizeimage(Tk*, TkImg*); 696 extern TkImg* tkauximage(TkTop*, char*, TkMemimage*, int); 697 698 /* choicebuttons - menus.c */ 699 extern Tk* tkfindchoicemenu(Tk*); 700 701 /* General - packr.c */ 702 extern void tkdelpack(Tk*); 703 extern void tkappendpack(Tk*, Tk*, int); 704 extern void tkpackqit(Tk*); 705 extern void tkrunpack(TkTop*); 706 extern void tksetslavereq(Tk*, TkGeom); 707 extern int tkisslave(Tk*, Tk*); 708 709 /* General - grids.c */ 710 extern int tkgridder(Tk*); 711 extern void tkgriddelslave(Tk*); 712 extern char* tkpropagate(TkTop*, char*); 713 extern void tkfreegrid(TkGrid*); 714 715 /* General - parse.c */ 716 extern char* tkconflist(TkOptab*, char**); 717 extern char* tkskip(char*, char*); 718 extern char* tkword(TkTop*, char*, char*, char*, int*); 719 extern char* tkxyparse(Tk*, char**, Point*); 720 extern char* tkparse(TkTop*, char*, TkOptab*, TkName**); 721 extern TkName* tkmkname(char*); 722 extern char* tkgencget(TkOptab*, char*, char**, TkTop*); 723 extern char* tkparsecolor(char*, ulong*); 724 725 /* General - utils.c */ 726 extern Image* tkgc(TkEnv*, int); 727 extern Image* tkgshade(TkEnv*, int, int); 728 extern Image* tkcolor(TkCtxt*, ulong); 729 extern Image* tkcolormix(TkCtxt*, ulong, ulong); 730 extern Image* tkgradient(TkCtxt*, Rectangle, int, ulong, ulong); 731 extern void tkclear(Image*, Rectangle); 732 extern TkEnv* tknewenv(TkTop*); 733 extern TkEnv* tkdefaultenv(TkTop*); 734 extern void tkputenv(TkEnv*); 735 extern TkEnv* tkdupenv(TkEnv**); 736 extern Tk* tknewobj(TkTop*, int, int); 737 extern Tk* tkfindsub(Tk*); 738 extern void tkfreebind(TkAction*); 739 extern void tkfreename(TkName*); 740 extern void tkfreeobj(Tk*); 741 extern char* tkaddchild(TkTop*, Tk*, TkName**); 742 extern Tk* tklook(TkTop*, char*, int); 743 extern void tktextsdraw(Image*, Rectangle, TkEnv*, int); 744 extern void tkbox(Image*, Rectangle, int, Image*); 745 extern void tkbevel(Image*, Point, int, int, int, Image*, Image*); 746 extern void tkdrawrelief(Image*, Tk*, Point, int, int); 747 extern Point tkstringsize(Tk*, char*); 748 extern void tkdrawstring(Tk*, Image*, Point, char*, int, Image *, int); 749 extern int tkeventfmt(Fmt*); 750 extern Tk* tkdeliver(Tk*, int, void*); 751 extern int tksubdeliver(Tk*, TkAction*, int, void*, int); 752 extern void tkcancel(TkAction**, int); 753 extern char* tkaction(TkAction**, int, int, char*, int); 754 extern char* tkitem(char*, char*); 755 extern Point tkposn(Tk*); 756 extern Point tkscrn2local(Tk*, Point); 757 extern int tkvisiblerect(Tk *tk, Rectangle *rr); 758 extern Point tkanchorpoint(Rectangle, Point, int); 759 extern char* tkfrac(char**, int*, TkEnv*); 760 extern char* tkfracword(TkTop*, char**, int*, TkEnv*); 761 extern char* tkfprint(char*, int); 762 extern char* tkvalue(char**, char*, ...); 763 extern void tkdirty(Tk *); 764 extern void tksorttable(void); 765 extern char* tkexec(TkTop*, char*, char**); 766 extern int tkeventfmt(Fmt*); 767 extern void tkerr(TkTop*, char*); 768 extern char* tkerrstr(TkTop*, char*); 769 extern char* tkcursorswitch(TkTop*, Image*, TkImg*); 770 extern void tkcursorset(TkTop*, Point); 771 extern char* tksetmgrab(TkTop*, Tk*); 772 extern int tkinsidepoly(Point*, int, int, Point); 773 extern int tklinehit(Point*, int, int, Point); 774 extern int tkiswordchar(int); 775 extern int tkhaskeyfocus(Tk*); 776 extern Rectangle tkrect(Tk*, int); 777 extern int tkchanhastype(ulong, int); 778 extern int tkhasalpha(TkEnv*, int); 779 extern void tksettransparent(Tk*, int); 780 extern ulong tkrgba(int, int, int, int); 781 extern ulong tkrgbashade(ulong, int); 782 extern void tkrgbavals(ulong, int*, int*, int*, int*); 783 extern void tkrepeat(Tk*, void(*)(Tk*, void*, int), void*, int, int); 784 extern void tkcancelrepeat(Tk*); 785 extern void tkblink(Tk*, void(*)(Tk*, int)); 786 extern void tkblinkreset(Tk*); 787 extern char* tkname(Tk*); 788 789 /* General - windw.c */ 790 extern TkCtxt* tknewctxt(Display*); 791 extern void tkfreectxt(TkCtxt*); 792 extern void tkfreecolcache(TkCtxt*); 793 extern Image* tkitmp(TkEnv*, Point, int); 794 extern void tkgeomchg(Tk*, TkGeom*, int); 795 extern Tk* tkinwindow(Tk*, Point, int); 796 extern Tk* tkfindfocus(TkTop*, int, int, int); 797 extern char* tkdrawslaves(Tk*, Point, int*); 798 extern char* tkupdate(TkTop*); 799 extern int tkischild(Tk*, Tk*); 800 extern void tksetbits(Tk*, int); 801 extern char* tkmap(Tk*); 802 extern void tkunmap(Tk*); 803 extern void tkmoveresize(Tk*, int, int, int, int); 804 extern int tkupdatewinsize(Tk*); 805 extern void tkmovewin(Tk*, Point); 806 extern Image* tkimageof(Tk*); 807 extern void tktopopt(Tk*, char*); 808 extern void tkdirtyfocusorder(TkTop*); 809 extern void tkbuildfocusorder(TkTop*); 810 extern void tksortfocusorder(TkWinfo*, int); 811 extern void tkappendfocusorder(Tk*); 812 extern void tksee(Tk*, Rectangle, Point); 813 extern char* tkseecmd(TkTop*, char*, char**); 814 815 /* Style specific extensions - extns.c */ 816 extern int tkextndeliver(Tk*, TkAction*, int, void*); 817 extern void tkextnfreeobj(Tk*); 818 extern int tkextnnewctxt(TkCtxt*); 819 extern void tkextnfreectxt(TkCtxt*); 820 extern char* tkextnparseseq(char*, char*, int*); 821 822 /* Debugging */ 823 extern void tkdump(Tk*); 824 extern void tktopdump(Tk*); 825 extern void tkcvsdump(Tk*); 826 827 /* External to libtk */ 828 extern void tkenterleave(TkTop*); 829 extern void tksetwinimage(Tk*, Image*); 830 extern void tkdestroywinimage(Tk*); 831 extern void tkfreevar(TkTop*, char*, int); 832 extern TkVar* tkmkvar(TkTop*, char*, int); 833 extern int tktolimbo(void*, char*); 834 extern void tkwreq(TkTop*, char*, ...); 835 extern void tkdelpanelimage(TkTop*, Image*); 836 837 extern TkMethod framemethod; 838 extern TkMethod labelmethod; 839 extern TkMethod checkbuttonmethod; 840 extern TkMethod buttonmethod; 841 extern TkMethod menubuttonmethod; 842 extern TkMethod menumethod; 843 extern TkMethod separatormethod; 844 extern TkMethod cascademethod; 845 extern TkMethod listboxmethod; 846 extern TkMethod scrollbarmethod; 847 extern TkMethod textmethod; 848 extern TkMethod canvasmethod; 849 extern TkMethod entrymethod; 850 extern TkMethod radiobuttonmethod; 851 extern TkMethod scalemethod; 852 extern TkMethod panelmethod; 853 extern TkMethod choicebuttonmethod; 854