tkInt8.0.5.h
上传用户:kellyonhid
上传日期:2013-10-12
资源大小:932k
文件大小:35k
源码类别:

3D图形编程

开发平台:

Visual C++

  1. /*
  2.  * tkInt.h --
  3.  *
  4.  * Declarations for things used internally by the Tk
  5.  * procedures but not exported outside the module.
  6.  *
  7.  * Copyright (c) 1990-1994 The Regents of the University of California.
  8.  * Copyright (c) 1994-1997 Sun Microsystems, Inc.
  9.  * Copyright (c) 1998 by Scriptics Corporation.
  10.  *
  11.  * See the file "license.terms" for information on usage and redistribution
  12.  * of this file, and for a DISCLAIMER OF ALL WARRANTIES.
  13.  *
  14.  * RCS: $Id: tkInt8.0.5.h,v 1.2 2001/07/02 17:56:29 srm Exp $ 
  15.  */
  16. #ifndef _TKINT
  17. #define _TKINT
  18. #ifndef _TK
  19. #include "tk.h"
  20. #endif
  21. #ifndef _TCL
  22. #include "tcl.h"
  23. #endif
  24. #ifndef _TKPORT
  25. #include <tkPort.h>
  26. #endif
  27. #ifdef BUILD_tk
  28. # undef TCL_STORAGE_CLASS
  29. # define TCL_STORAGE_CLASS DLLEXPORT
  30. #endif
  31. /*
  32.  * Opaque type declarations:
  33.  */
  34. typedef struct TkColormap TkColormap;
  35. typedef struct TkGrabEvent TkGrabEvent;
  36. typedef struct Tk_PostscriptInfo Tk_PostscriptInfo;
  37. typedef struct TkpCursor_ *TkpCursor;
  38. typedef struct TkRegion_ *TkRegion;
  39. typedef struct TkStressedCmap TkStressedCmap;
  40. typedef struct TkBindInfo_ *TkBindInfo;
  41. /*
  42.  * Procedure types.
  43.  */
  44. typedef int (TkBindEvalProc) _ANSI_ARGS_((ClientData clientData,
  45. Tcl_Interp *interp, XEvent *eventPtr, Tk_Window tkwin,
  46. KeySym keySym));
  47. typedef void (TkBindFreeProc) _ANSI_ARGS_((ClientData clientData));
  48. typedef Window (TkClassCreateProc) _ANSI_ARGS_((Tk_Window tkwin,
  49. Window parent, ClientData instanceData));
  50. typedef void (TkClassGeometryProc) _ANSI_ARGS_((ClientData instanceData));
  51. typedef void (TkClassModalProc) _ANSI_ARGS_((Tk_Window tkwin,
  52. XEvent *eventPtr));
  53. /*
  54.  * Widget class procedures used to implement platform specific widget
  55.  * behavior.
  56.  */
  57. typedef struct TkClassProcs {
  58.     TkClassCreateProc *createProc;
  59. /* Procedure to invoke when the
  60.                                    platform-dependent window needs to be
  61.                                    created. */
  62.     TkClassGeometryProc *geometryProc;
  63. /* Procedure to invoke when the geometry of a
  64.    window needs to be recalculated as a result
  65.    of some change in the system. */
  66.     TkClassModalProc *modalProc;
  67. /* Procedure to invoke after all bindings on a
  68.    widget have been triggered in order to
  69.    handle a modal loop. */
  70. } TkClassProcs;
  71. /*
  72.  * One of the following structures is maintained for each cursor in
  73.  * use in the system.  This structure is used by tkCursor.c and the
  74.  * various system specific cursor files.
  75.  */
  76. typedef struct TkCursor {
  77.     Tk_Cursor cursor; /* System specific identifier for cursor. */
  78.     int refCount; /* Number of active uses of cursor. */
  79.     Tcl_HashTable *otherTable; /* Second table (other than idTable) used
  80.  * to index this entry. */
  81.     Tcl_HashEntry *hashPtr; /* Entry in otherTable for this structure
  82.  * (needed when deleting). */
  83. } TkCursor;
  84. /*
  85.  * One of the following structures is maintained for each display
  86.  * containing a window managed by Tk:
  87.  */
  88. typedef struct TkDisplay {
  89.     Display *display; /* Xlib's info about display. */
  90.     struct TkDisplay *nextPtr; /* Next in list of all displays. */
  91.     char *name; /* Name of display (with any screen
  92.  * identifier removed).  Malloc-ed. */
  93.     Time lastEventTime; /* Time of last event received for this
  94.  * display. */
  95.     /*
  96.      * Information used primarily by tkBind.c:
  97.      */
  98.     int bindInfoStale; /* Non-zero means the variables in this
  99.  * part of the structure are potentially
  100.  * incorrect and should be recomputed. */
  101.     unsigned int modeModMask; /* Has one bit set to indicate the modifier
  102.  * corresponding to "mode shift".  If no
  103.  * such modifier, than this is zero. */
  104.     unsigned int metaModMask; /* Has one bit set to indicate the modifier
  105.  * corresponding to the "Meta" key.  If no
  106.  * such modifier, then this is zero. */
  107.     unsigned int altModMask; /* Has one bit set to indicate the modifier
  108.  * corresponding to the "Meta" key.  If no
  109.  * such modifier, then this is zero. */
  110.     enum {LU_IGNORE, LU_CAPS, LU_SHIFT} lockUsage;
  111. /* Indicates how to interpret lock modifier. */
  112.     int numModKeyCodes; /* Number of entries in modKeyCodes array
  113.  * below. */
  114.     KeyCode *modKeyCodes; /* Pointer to an array giving keycodes for
  115.  * all of the keys that have modifiers
  116.  * associated with them.  Malloc'ed, but
  117.  * may be NULL. */
  118.     /*
  119.      * Information used by tkError.c only:
  120.      */
  121.     struct TkErrorHandler *errorPtr;
  122. /* First in list of error handlers
  123.  * for this display.  NULL means
  124.  * no handlers exist at present. */
  125.     int deleteCount; /* Counts # of handlers deleted since
  126.  * last time inactive handlers were
  127.  * garbage-collected.  When this number
  128.  * gets big, handlers get cleaned up. */
  129.     /*
  130.      * Information used by tkSend.c only:
  131.      */
  132.     Tk_Window commTkwin; /* Window used for communication
  133.  * between interpreters during "send"
  134.  * commands.  NULL means send info hasn't
  135.  * been initialized yet. */
  136.     Atom commProperty; /* X's name for comm property. */
  137.     Atom registryProperty; /* X's name for property containing
  138.  * registry of interpreter names. */
  139.     Atom appNameProperty; /* X's name for property used to hold the
  140.  * application name on each comm window. */
  141.     /*
  142.      * Information used by tkSelect.c and tkClipboard.c only:
  143.      */
  144.     struct TkSelectionInfo *selectionInfoPtr;
  145. /* First in list of selection information
  146.  * records.  Each entry contains information
  147.  * about the current owner of a particular
  148.  * selection on this display. */
  149.     Atom multipleAtom; /* Atom for MULTIPLE.  None means
  150.  * selection stuff isn't initialized. */
  151.     Atom incrAtom; /* Atom for INCR. */
  152.     Atom targetsAtom; /* Atom for TARGETS. */
  153.     Atom timestampAtom; /* Atom for TIMESTAMP. */
  154.     Atom textAtom; /* Atom for TEXT. */
  155.     Atom compoundTextAtom; /* Atom for COMPOUND_TEXT. */
  156.     Atom applicationAtom; /* Atom for TK_APPLICATION. */
  157.     Atom windowAtom; /* Atom for TK_WINDOW. */
  158.     Atom clipboardAtom; /* Atom for CLIPBOARD. */
  159.     Tk_Window clipWindow; /* Window used for clipboard ownership and to
  160.  * retrieve selections between processes. NULL
  161.  * means clipboard info hasn't been
  162.  * initialized. */
  163.     int clipboardActive; /* 1 means we currently own the clipboard
  164.  * selection, 0 means we don't. */
  165.     struct TkMainInfo *clipboardAppPtr;
  166. /* Last application that owned clipboard. */
  167.     struct TkClipboardTarget *clipTargetPtr;
  168. /* First in list of clipboard type information
  169.  * records.  Each entry contains information
  170.  * about the buffers for a given selection
  171.  * target. */
  172.     /*
  173.      * Information used by tkAtom.c only:
  174.      */
  175.     int atomInit; /* 0 means stuff below hasn't been
  176.  * initialized yet. */
  177.     Tcl_HashTable nameTable; /* Maps from names to Atom's. */
  178.     Tcl_HashTable atomTable; /* Maps from Atom's back to names. */
  179.     /*
  180.      * Information used by tkCursor.c only:
  181.      */
  182.     Font cursorFont; /* Font to use for standard cursors.
  183.  * None means font not loaded yet. */
  184.     /*
  185.      * Information used by tkGrab.c only:
  186.      */
  187.     struct TkWindow *grabWinPtr;
  188. /* Window in which the pointer is currently
  189.  * grabbed, or NULL if none. */
  190.     struct TkWindow *eventualGrabWinPtr;
  191. /* Value that grabWinPtr will have once the
  192.  * grab event queue (below) has been
  193.  * completely emptied. */
  194.     struct TkWindow *buttonWinPtr;
  195. /* Window in which first mouse button was
  196.  * pressed while grab was in effect, or NULL
  197.  * if no such press in effect. */
  198.     struct TkWindow *serverWinPtr;
  199. /* If no application contains the pointer then
  200.  * this is NULL.  Otherwise it contains the
  201.  * last window for which we've gotten an
  202.  * Enter or Leave event from the server (i.e.
  203.  * the last window known to have contained
  204.  * the pointer).  Doesn't reflect events
  205.  * that were synthesized in tkGrab.c. */
  206.     TkGrabEvent *firstGrabEventPtr;
  207. /* First in list of enter/leave events
  208.  * synthesized by grab code.  These events
  209.  * must be processed in order before any other
  210.  * events are processed.  NULL means no such
  211.  * events. */
  212.     TkGrabEvent *lastGrabEventPtr;
  213. /* Last in list of synthesized events, or NULL
  214.  * if list is empty. */
  215.     int grabFlags; /* Miscellaneous flag values.  See definitions
  216.  * in tkGrab.c. */
  217.     /*
  218.      * Information used by tkXId.c only:
  219.      */
  220.     struct TkIdStack *idStackPtr;
  221. /* First in list of chunks of free resource
  222.  * identifiers, or NULL if there are no free
  223.  * resources. */
  224.     XID (*defaultAllocProc) _ANSI_ARGS_((Display *display));
  225. /* Default resource allocator for display. */
  226.     struct TkIdStack *windowStackPtr;
  227. /* First in list of chunks of window
  228.  * identifers that can't be reused right
  229.  * now. */
  230.     int idCleanupScheduled; /* 1 means a call to WindowIdCleanup has
  231.  * already been scheduled, 0 means it
  232.  * hasn't. */
  233.     /*
  234.      * Information maintained by tkWindow.c for use later on by tkXId.c:
  235.      */
  236.     int destroyCount; /* Number of Tk_DestroyWindow operations
  237.  * in progress. */
  238.     unsigned long lastDestroyRequest;
  239. /* Id of most recent XDestroyWindow request;
  240.  * can re-use ids in windowStackPtr when
  241.  * server has seen this request and event
  242.  * queue is empty. */
  243.     /*
  244.      * Information used by tkVisual.c only:
  245.      */
  246.     TkColormap *cmapPtr; /* First in list of all non-default colormaps
  247.  * allocated for this display. */
  248.     /*
  249.      * Information used by tkFocus.c only:
  250.      */
  251.     struct TkWindow *implicitWinPtr;
  252. /* If the focus arrived at a toplevel window
  253.  * implicitly via an Enter event (rather
  254.  * than via a FocusIn event), this points
  255.  * to the toplevel window.  Otherwise it is
  256.  * NULL. */
  257.     struct TkWindow *focusPtr; /* Points to the window on this display that
  258.  * should be receiving keyboard events.  When
  259.  * multiple applications on the display have
  260.  * the focus, this will refer to the
  261.  * innermost window in the innermost
  262.  * application.  This information isn't used
  263.  * under Unix or Windows, but it's needed on
  264.  * the Macintosh. */
  265.     /*
  266.      * Used by tkColor.c only:
  267.      */
  268.     TkStressedCmap *stressPtr; /* First in list of colormaps that have
  269.  * filled up, so we have to pick an
  270.  * approximate color. */
  271.     /*
  272.      * Used by tkEvent.c only:
  273.      */
  274.     struct TkWindowEvent *delayedMotionPtr;
  275. /* Points to a malloc-ed motion event
  276.  * whose processing has been delayed in
  277.  * the hopes that another motion event
  278.  * will come along right away and we can
  279.  * merge the two of them together.  NULL
  280.  * means that there is no delayed motion
  281.  * event. */
  282.     /*
  283.      * Miscellaneous information:
  284.      */
  285. #ifdef TK_USE_INPUT_METHODS
  286.     XIM inputMethod; /* Input method for this display */
  287. #endif /* TK_USE_INPUT_METHODS */
  288.     Tcl_HashTable winTable; /* Maps from X window ids to TkWindow ptrs. */
  289.     int refCount; /* Reference count of how many Tk applications
  290.                                  * are using this display. Used to clean up
  291.                                  * the display when we no longer have any
  292.                                  * Tk applications using it.
  293.                                  */
  294. } TkDisplay;
  295. /*
  296.  * One of the following structures exists for each error handler
  297.  * created by a call to Tk_CreateErrorHandler.  The structure
  298.  * is managed by tkError.c.
  299.  */
  300. typedef struct TkErrorHandler {
  301.     TkDisplay *dispPtr; /* Display to which handler applies. */
  302.     unsigned long firstRequest; /* Only errors with serial numbers
  303.  * >= to this are considered. */
  304.     unsigned long lastRequest; /* Only errors with serial numbers
  305.  * <= to this are considered.  This
  306.  * field is filled in when XUnhandle
  307.  * is called.  -1 means XUnhandle
  308.  * hasn't been called yet. */
  309.     int error; /* Consider only errors with this
  310.  * error_code (-1 means consider
  311.  * all errors). */
  312.     int request; /* Consider only errors with this
  313.  * major request code (-1 means
  314.  * consider all major codes). */
  315.     int minorCode; /* Consider only errors with this
  316.  * minor request code (-1 means
  317.  * consider all minor codes). */
  318.     Tk_ErrorProc *errorProc; /* Procedure to invoke when a matching
  319.  * error occurs.  NULL means just ignore
  320.  * errors. */
  321.     ClientData clientData; /* Arbitrary value to pass to
  322.  * errorProc. */
  323.     struct TkErrorHandler *nextPtr;
  324. /* Pointer to next older handler for
  325.  * this display, or NULL for end of
  326.  * list. */
  327. } TkErrorHandler;
  328. /*
  329.  * One of the following structures exists for each event handler
  330.  * created by calling Tk_CreateEventHandler.  This information
  331.  * is used by tkEvent.c only.
  332.  */
  333. typedef struct TkEventHandler {
  334.     unsigned long mask; /* Events for which to invoke
  335.  * proc. */
  336.     Tk_EventProc *proc; /* Procedure to invoke when an event
  337.  * in mask occurs. */
  338.     ClientData clientData; /* Argument to pass to proc. */
  339.     struct TkEventHandler *nextPtr;
  340. /* Next in list of handlers
  341.  * associated with window (NULL means
  342.  * end of list). */
  343. } TkEventHandler;
  344. /*
  345.  * Tk keeps one of the following data structures for each main
  346.  * window (created by a call to Tk_CreateMainWindow).  It stores
  347.  * information that is shared by all of the windows associated
  348.  * with a particular main window.
  349.  */
  350. typedef struct TkMainInfo {
  351.     int refCount; /* Number of windows whose "mainPtr" fields
  352.  * point here.  When this becomes zero, can
  353.  * free up the structure (the reference
  354.  * count is zero because windows can get
  355.  * deleted in almost any order;  the main
  356.  * window isn't necessarily the last one
  357.  * deleted). */
  358.     struct TkWindow *winPtr; /* Pointer to main window. */
  359.     Tcl_Interp *interp; /* Interpreter associated with application. */
  360.     Tcl_HashTable nameTable; /* Hash table mapping path names to TkWindow
  361.  * structs for all windows related to this
  362.  * main window.  Managed by tkWindow.c. */
  363.     Tk_BindingTable bindingTable;
  364. /* Used in conjunction with "bind" command
  365.  * to bind events to Tcl commands. */
  366.     TkBindInfo bindInfo; /* Information used by tkBind.c on a per
  367.  * interpreter basis. */
  368.     struct TkFontInfo *fontInfoPtr;
  369. /* Hold named font tables.  Used only by
  370.  * tkFont.c. */
  371.     /*
  372.      * Information used only by tkFocus.c and tk*Embed.c:
  373.      */
  374.     struct TkToplevelFocusInfo *tlFocusPtr;
  375. /* First in list of records containing focus
  376.  * information for each top-level in the
  377.  * application.  Used only by tkFocus.c. */
  378.     struct TkDisplayFocusInfo *displayFocusPtr;
  379. /* First in list of records containing focus
  380.  * information for each display that this
  381.  * application has ever used.  Used only
  382.  * by tkFocus.c. */
  383.     struct ElArray *optionRootPtr;
  384. /* Top level of option hierarchy for this
  385.  * main window.  NULL means uninitialized.
  386.  * Managed by tkOption.c. */
  387.     Tcl_HashTable imageTable; /* Maps from image names to Tk_ImageMaster
  388.  * structures.  Managed by tkImage.c. */
  389.     int strictMotif; /* This is linked to the tk_strictMotif
  390.  * global variable. */
  391.     struct TkMainInfo *nextPtr; /* Next in list of all main windows managed by
  392.  * this process. */
  393. } TkMainInfo;
  394. /*
  395.  * Tk keeps the following data structure for each of it's builtin
  396.  * bitmaps.  This structure is only used by tkBitmap.c and other
  397.  * platform specific bitmap files.
  398.  */
  399. typedef struct {
  400.     char *source; /* Bits for bitmap. */
  401.     int width, height; /* Dimensions of bitmap. */
  402.     int native; /* 0 means generic (X style) bitmap,
  403.       * 1 means native style bitmap. */
  404. } TkPredefBitmap;
  405. /*
  406.  * Tk keeps one of the following structures for each window.
  407.  * Some of the information (like size and location) is a shadow
  408.  * of information managed by the X server, and some is special
  409.  * information used here, such as event and geometry management
  410.  * information.  This information is (mostly) managed by tkWindow.c.
  411.  * WARNING: the declaration below must be kept consistent with the
  412.  * Tk_FakeWin structure in tk.h.  If you change one, be sure to
  413.  * change the other!!
  414.  */
  415. typedef struct TkWindow {
  416.     /*
  417.      * Structural information:
  418.      */
  419.     Display *display; /* Display containing window. */
  420.     TkDisplay *dispPtr; /* Tk's information about display
  421.  * for window. */
  422.     int screenNum; /* Index of screen for window, among all
  423.  * those for dispPtr. */
  424.     Visual *visual; /* Visual to use for window.  If not default,
  425.  * MUST be set before X window is created. */
  426.     int depth; /* Number of bits/pixel. */
  427.     Window window; /* X's id for window.   NULL means window
  428.  * hasn't actually been created yet, or it's
  429.  * been deleted. */
  430.     struct TkWindow *childList; /* First in list of child windows,
  431.  * or NULL if no children.  List is in
  432.  * stacking order, lowest window first.*/
  433.     struct TkWindow *lastChildPtr;
  434. /* Last in list of child windows (highest
  435.  * in stacking order), or NULL if no
  436.  * children. */
  437.     struct TkWindow *parentPtr; /* Pointer to parent window (logical
  438.  * parent, not necessarily X parent).  NULL
  439.  * means either this is the main window, or
  440.  * the window's parent has already been
  441.  * deleted. */
  442.     struct TkWindow *nextPtr; /* Next higher sibling (in stacking order)
  443.  * in list of children with same parent.  NULL
  444.  * means end of list. */
  445.     TkMainInfo *mainPtr; /* Information shared by all windows
  446.  * associated with a particular main
  447.  * window.  NULL means this window is
  448.  * a rogue that isn't associated with
  449.  * any application (at present, this
  450.  * only happens for the dummy windows
  451.  * used for "send" communication).  */
  452.     /*
  453.      * Name and type information for the window:
  454.      */
  455.     char *pathName; /* Path name of window (concatenation
  456.  * of all names between this window and
  457.  * its top-level ancestor).  This is a
  458.  * pointer into an entry in
  459.  * mainPtr->nameTable.  NULL means that
  460.  * the window hasn't been completely
  461.  * created yet. */
  462.     Tk_Uid nameUid; /* Name of the window within its parent
  463.  * (unique within the parent). */
  464.     Tk_Uid classUid; /* Class of the window.  NULL means window
  465.  * hasn't been given a class yet. */
  466.     /*
  467.      * Geometry and other attributes of window.  This information
  468.      * may not be updated on the server immediately;  stuff that
  469.      * hasn't been reflected in the server yet is called "dirty".
  470.      * At present, information can be dirty only if the window
  471.      * hasn't yet been created.
  472.      */
  473.     XWindowChanges changes; /* Geometry and other info about
  474.  * window. */
  475.     unsigned int dirtyChanges; /* Bits indicate fields of "changes"
  476.  * that are dirty. */
  477.     XSetWindowAttributes atts; /* Current attributes of window. */
  478.     unsigned long dirtyAtts; /* Bits indicate fields of "atts"
  479.  * that are dirty. */
  480.     unsigned int flags; /* Various flag values:  these are all
  481.  * defined in tk.h (confusing, but they're
  482.  * needed there for some query macros). */
  483.     /*
  484.      * Information kept by the event manager (tkEvent.c):
  485.      */
  486.     TkEventHandler *handlerList;/* First in list of event handlers
  487.  * declared for this window, or
  488.  * NULL if none. */
  489. #ifdef TK_USE_INPUT_METHODS
  490.     XIC inputContext; /* Input context (for input methods). */
  491. #endif /* TK_USE_INPUT_METHODS */
  492.     /*
  493.      * Information used for event bindings (see "bind" and "bindtags"
  494.      * commands in tkCmds.c):
  495.      */
  496.     ClientData *tagPtr; /* Points to array of tags used for bindings
  497.  * on this window.  Each tag is a Tk_Uid.
  498.  * Malloc'ed.  NULL means no tags. */
  499.     int numTags; /* Number of tags at *tagPtr. */
  500.     /*
  501.      * Information used by tkOption.c to manage options for the
  502.      * window.
  503.      */
  504.     int optionLevel; /* -1 means no option information is
  505.  * currently cached for this window.
  506.  * Otherwise this gives the level in
  507.  * the option stack at which info is
  508.  * cached. */
  509.     /*
  510.      * Information used by tkSelect.c to manage the selection.
  511.      */
  512.     struct TkSelHandler *selHandlerList;
  513. /* First in list of handlers for
  514.  * returning the selection in various
  515.  * forms. */
  516.     /*
  517.      * Information used by tkGeometry.c for geometry management.
  518.      */
  519.     Tk_GeomMgr *geomMgrPtr; /* Information about geometry manager for
  520.  * this window. */
  521.     ClientData geomData; /* Argument for geometry manager procedures. */
  522.     int reqWidth, reqHeight; /* Arguments from last call to
  523.  * Tk_GeometryRequest, or 0's if
  524.  * Tk_GeometryRequest hasn't been
  525.  * called. */
  526.     int internalBorderWidth; /* Width of internal border of window
  527.  * (0 means no internal border).  Geometry
  528.  * managers should not normally place children
  529.  * on top of the border. */
  530.     /*
  531.      * Information maintained by tkWm.c for window manager communication.
  532.      */
  533.     struct TkWmInfo *wmInfoPtr; /* For top-level windows (and also
  534.  * for special Unix menubar and wrapper
  535.  * windows), points to structure with
  536.  * wm-related info (see tkWm.c).  For
  537.  * other windows, this is NULL. */
  538.     /*
  539.      * Information used by widget classes.
  540.      */
  541.     TkClassProcs *classProcsPtr;
  542.     ClientData instanceData;
  543.     /*
  544.      * Platform specific information private to each port.
  545.      */
  546.     struct TkWindowPrivate *privatePtr;
  547. } TkWindow;
  548. /*
  549.  * The following structure is used as a two way map between integers
  550.  * and strings, usually to map between an internal C representation
  551.  * and the strings used in Tcl.
  552.  */
  553. typedef struct TkStateMap {
  554.     int numKey; /* Integer representation of a value. */
  555.     char *strKey; /* String representation of a value. */
  556. } TkStateMap;
  557. /*
  558.  * This structure is used by the Mac and Window porting layers as
  559.  * the internal representation of a clip_mask in a GC.
  560.  */
  561. typedef struct TkpClipMask {
  562.     int type; /* One of TKP_CLIP_PIXMAP or TKP_CLIP_REGION */
  563.     union {
  564. Pixmap pixmap;
  565. TkRegion region;
  566.     } value;
  567. } TkpClipMask;
  568. #define TKP_CLIP_PIXMAP 0
  569. #define TKP_CLIP_REGION 1
  570. /*
  571.  * Pointer to first entry in list of all displays currently known.
  572.  */
  573. extern TkDisplay *tkDisplayList;
  574. /*
  575.  * Return values from TkGrabState:
  576.  */
  577. #define TK_GRAB_NONE 0
  578. #define TK_GRAB_IN_TREE 1
  579. #define TK_GRAB_ANCESTOR 2
  580. #define TK_GRAB_EXCLUDED 3
  581. /*
  582.  * The macro below is used to modify a "char" value (e.g. by casting
  583.  * it to an unsigned character) so that it can be used safely with
  584.  * macros such as isspace.
  585.  */
  586. #define UCHAR(c) ((unsigned char) (c))
  587. /*
  588.  * The following symbol is used in the mode field of FocusIn events
  589.  * generated by an embedded application to request the input focus from
  590.  * its container.
  591.  */
  592. #define EMBEDDED_APP_WANTS_FOCUS (NotifyNormal + 20)
  593. /*
  594.  * Miscellaneous variables shared among Tk modules but not exported
  595.  * to the outside world:
  596.  */
  597. extern Tk_Uid tkActiveUid;
  598. extern Tk_ImageType tkBitmapImageType;
  599. extern Tk_Uid tkDisabledUid;
  600. extern Tk_PhotoImageFormat tkImgFmtGIF;
  601. extern void (*tkHandleEventProc) _ANSI_ARGS_((
  602.          XEvent* eventPtr));
  603. extern Tk_PhotoImageFormat tkImgFmtPPM;
  604. extern TkMainInfo *tkMainWindowList;
  605. extern Tk_Uid tkNormalUid;
  606. extern Tk_ImageType tkPhotoImageType;
  607. extern Tcl_HashTable tkPredefBitmapTable;
  608. extern int tkSendSerial;
  609. /*
  610.  * Internal procedures shared among Tk modules but not exported
  611.  * to the outside world:
  612.  */
  613. EXTERN char * TkAlignImageData _ANSI_ARGS_((XImage *image,
  614.     int alignment, int bitOrder));
  615. EXTERN TkWindow * TkAllocWindow _ANSI_ARGS_((TkDisplay *dispPtr,
  616.     int screenNum, TkWindow *parentPtr));
  617. EXTERN void TkBezierPoints _ANSI_ARGS_((double control[],
  618.     int numSteps, double *coordPtr));
  619. EXTERN void TkBezierScreenPoints _ANSI_ARGS_((Tk_Canvas canvas,
  620.     double control[], int numSteps,
  621.     XPoint *xPointPtr));
  622. EXTERN void TkBindDeadWindow _ANSI_ARGS_((TkWindow *winPtr));
  623. EXTERN void TkBindEventProc _ANSI_ARGS_((TkWindow *winPtr,
  624.     XEvent *eventPtr));
  625. EXTERN void TkBindFree _ANSI_ARGS_((TkMainInfo *mainPtr));
  626. EXTERN void TkBindInit _ANSI_ARGS_((TkMainInfo *mainPtr));
  627. EXTERN void TkChangeEventWindow _ANSI_ARGS_((XEvent *eventPtr,
  628.     TkWindow *winPtr));
  629. #ifndef TkClipBox
  630. EXTERN void TkClipBox _ANSI_ARGS_((TkRegion rgn,
  631.     XRectangle* rect_return));
  632. #endif
  633. EXTERN int TkClipInit _ANSI_ARGS_((Tcl_Interp *interp,
  634.     TkDisplay *dispPtr));
  635. EXTERN void TkComputeAnchor _ANSI_ARGS_((Tk_Anchor anchor,
  636.     Tk_Window tkwin, int padX, int padY,
  637.     int innerWidth, int innerHeight, int *xPtr,
  638.     int *yPtr));
  639. EXTERN int TkCopyAndGlobalEval _ANSI_ARGS_((Tcl_Interp *interp,
  640.     char *script));
  641. EXTERN unsigned long TkCreateBindingProcedure _ANSI_ARGS_((
  642.     Tcl_Interp *interp, Tk_BindingTable bindingTable,
  643.     ClientData object, char *eventString,
  644.     TkBindEvalProc *evalProc, TkBindFreeProc *freeProc,
  645.     ClientData clientData));
  646. EXTERN TkCursor * TkCreateCursorFromData _ANSI_ARGS_((Tk_Window tkwin,
  647.     char *source, char *mask, int width, int height,
  648.     int xHot, int yHot, XColor fg, XColor bg));
  649. EXTERN int TkCreateFrame _ANSI_ARGS_((ClientData clientData,
  650.     Tcl_Interp *interp, int argc, char **argv,
  651.     int toplevel, char *appName));
  652. EXTERN Tk_Window TkCreateMainWindow _ANSI_ARGS_((Tcl_Interp *interp,
  653.     char *screenName, char *baseName));
  654. #ifndef TkCreateRegion
  655. EXTERN TkRegion TkCreateRegion _ANSI_ARGS_((void));
  656. #endif
  657. EXTERN Time TkCurrentTime _ANSI_ARGS_((TkDisplay *dispPtr));
  658. EXTERN int TkDeadAppCmd _ANSI_ARGS_((ClientData clientData,
  659.     Tcl_Interp *interp, int argc, char **argv));
  660. EXTERN void TkDeleteAllImages _ANSI_ARGS_((TkMainInfo *mainPtr));
  661. #ifndef TkDestroyRegion
  662. EXTERN void TkDestroyRegion _ANSI_ARGS_((TkRegion rgn));
  663. #endif
  664. EXTERN void TkDoConfigureNotify _ANSI_ARGS_((TkWindow *winPtr));
  665. EXTERN void TkDrawInsetFocusHighlight _ANSI_ARGS_((
  666.     Tk_Window tkwin, GC gc, int width,
  667.     Drawable drawable, int padding));
  668. EXTERN void TkEventDeadWindow _ANSI_ARGS_((TkWindow *winPtr));
  669. EXTERN void TkFillPolygon _ANSI_ARGS_((Tk_Canvas canvas,
  670.     double *coordPtr, int numPoints, Display *display,
  671.     Drawable drawable, GC gc, GC outlineGC));
  672. EXTERN int TkFindStateNum _ANSI_ARGS_((Tcl_Interp *interp,
  673.     CONST char *option, CONST TkStateMap *mapPtr,
  674.     CONST char *strKey));
  675. EXTERN char * TkFindStateString _ANSI_ARGS_((
  676.     CONST TkStateMap *mapPtr, int numKey));
  677. EXTERN void TkFocusDeadWindow _ANSI_ARGS_((TkWindow *winPtr));
  678. EXTERN int TkFocusFilterEvent _ANSI_ARGS_((TkWindow *winPtr,
  679.     XEvent *eventPtr));
  680. EXTERN TkWindow * TkFocusKeyEvent _ANSI_ARGS_((TkWindow *winPtr,
  681.     XEvent *eventPtr));
  682. EXTERN void TkFontPkgInit _ANSI_ARGS_((TkMainInfo *mainPtr));
  683. EXTERN void TkFontPkgFree _ANSI_ARGS_((TkMainInfo *mainPtr));
  684. EXTERN void TkFreeBindingTags _ANSI_ARGS_((TkWindow *winPtr));
  685. EXTERN void TkFreeCursor _ANSI_ARGS_((TkCursor *cursorPtr));
  686. EXTERN void TkFreeWindowId _ANSI_ARGS_((TkDisplay *dispPtr,
  687.     Window w));
  688. EXTERN void TkGenerateActivateEvents _ANSI_ARGS_((
  689.     TkWindow *winPtr, int active));
  690. EXTERN char * TkGetBitmapData _ANSI_ARGS_((Tcl_Interp *interp,
  691.     char *string, char *fileName, int *widthPtr,
  692.     int *heightPtr, int *hotXPtr, int *hotYPtr));
  693. EXTERN void TkGetButtPoints _ANSI_ARGS_((double p1[], double p2[],
  694.     double width, int project, double m1[],
  695.     double m2[]));
  696. EXTERN TkCursor * TkGetCursorByName _ANSI_ARGS_((Tcl_Interp *interp,
  697.     Tk_Window tkwin, Tk_Uid string));
  698. EXTERN char * TkGetDefaultScreenName _ANSI_ARGS_((Tcl_Interp *interp,
  699.     char *screenName));
  700. EXTERN TkDisplay * TkGetDisplay _ANSI_ARGS_((Display *display));
  701. EXTERN int TkGetDisplayOf _ANSI_ARGS_((Tcl_Interp *interp,
  702.     int objc, Tcl_Obj *CONST objv[],
  703.     Tk_Window *tkwinPtr));
  704. EXTERN TkWindow * TkGetFocusWin _ANSI_ARGS_((TkWindow *winPtr));
  705. EXTERN int TkGetInterpNames _ANSI_ARGS_((Tcl_Interp *interp,
  706.     Tk_Window tkwin));
  707. EXTERN int TkGetMiterPoints _ANSI_ARGS_((double p1[], double p2[],
  708.     double p3[], double width, double m1[],
  709.     double m2[]));
  710. EXTERN void TkGetPointerCoords _ANSI_ARGS_((Tk_Window tkwin,
  711.     int *xPtr, int *yPtr));
  712. EXTERN int TkGetProlog _ANSI_ARGS_((Tcl_Interp *interp));
  713. EXTERN void TkGetServerInfo _ANSI_ARGS_((Tcl_Interp *interp,
  714.     Tk_Window tkwin));
  715. EXTERN void TkGrabDeadWindow _ANSI_ARGS_((TkWindow *winPtr));
  716. EXTERN int TkGrabState _ANSI_ARGS_((TkWindow *winPtr));
  717. EXTERN void TkIncludePoint _ANSI_ARGS_((Tk_Item *itemPtr,
  718.     double *pointPtr));
  719. EXTERN void TkInitXId _ANSI_ARGS_((TkDisplay *dispPtr));
  720. EXTERN void TkInOutEvents _ANSI_ARGS_((XEvent *eventPtr,
  721.     TkWindow *sourcePtr, TkWindow *destPtr,
  722.     int leaveType, int enterType,
  723.     Tcl_QueuePosition position));
  724. EXTERN void TkInstallFrameMenu _ANSI_ARGS_((Tk_Window tkwin));
  725. #ifndef TkIntersectRegion
  726. EXTERN void TkIntersectRegion _ANSI_ARGS_((TkRegion sra,
  727.     TkRegion srcb, TkRegion dr_return));
  728. #endif
  729. EXTERN char * TkKeysymToString _ANSI_ARGS_((KeySym keysym));
  730. EXTERN int TkLineToArea _ANSI_ARGS_((double end1Ptr[2],
  731.     double end2Ptr[2], double rectPtr[4]));
  732. EXTERN double TkLineToPoint _ANSI_ARGS_((double end1Ptr[2],
  733.     double end2Ptr[2], double pointPtr[2]));
  734. EXTERN int TkMakeBezierCurve _ANSI_ARGS_((Tk_Canvas canvas,
  735.     double *pointPtr, int numPoints, int numSteps,
  736.     XPoint xPoints[], double dblPoints[]));
  737. EXTERN void TkMakeBezierPostscript _ANSI_ARGS_((Tcl_Interp *interp,
  738.     Tk_Canvas canvas, double *pointPtr,
  739.     int numPoints));
  740. EXTERN void TkOptionClassChanged _ANSI_ARGS_((TkWindow *winPtr));
  741. EXTERN void TkOptionDeadWindow _ANSI_ARGS_((TkWindow *winPtr));
  742. EXTERN int TkOvalToArea _ANSI_ARGS_((double *ovalPtr,
  743.     double *rectPtr));
  744. EXTERN double TkOvalToPoint _ANSI_ARGS_((double ovalPtr[4],
  745.     double width, int filled, double pointPtr[2]));
  746. EXTERN int TkpChangeFocus _ANSI_ARGS_((TkWindow *winPtr,
  747.     int force));
  748. EXTERN void TkpCloseDisplay _ANSI_ARGS_((TkDisplay *dispPtr));
  749. EXTERN void TkpClaimFocus _ANSI_ARGS_((TkWindow *topLevelPtr,
  750.     int force));
  751. #ifndef TkpCmapStressed
  752. EXTERN int TkpCmapStressed _ANSI_ARGS_((Tk_Window tkwin,
  753.     Colormap colormap));
  754. #endif
  755. #ifndef TkpCreateNativeBitmap
  756. EXTERN Pixmap TkpCreateNativeBitmap _ANSI_ARGS_((Display *display,
  757.     char * source));
  758. #endif
  759. #ifndef TkpDefineNativeBitmaps
  760. EXTERN void TkpDefineNativeBitmaps _ANSI_ARGS_((void));
  761. #endif
  762. EXTERN void TkpDisplayWarning _ANSI_ARGS_((char *msg,
  763.     char *title));
  764. EXTERN void TkpGetAppName _ANSI_ARGS_((Tcl_Interp *interp,
  765.     Tcl_DString *name));
  766. EXTERN unsigned long TkpGetMS _ANSI_ARGS_((void));
  767. #ifndef TkpGetNativeAppBitmap
  768. EXTERN Pixmap TkpGetNativeAppBitmap _ANSI_ARGS_((Display *display,
  769.     char *name, int *width, int *height));
  770. #endif
  771. EXTERN TkWindow * TkpGetOtherWindow _ANSI_ARGS_((TkWindow *winPtr));
  772. EXTERN TkWindow * TkpGetWrapperWindow _ANSI_ARGS_((TkWindow *winPtr));
  773. EXTERN int TkpInit _ANSI_ARGS_((Tcl_Interp *interp));
  774. EXTERN void TkpInitializeMenuBindings _ANSI_ARGS_((
  775.     Tcl_Interp *interp, Tk_BindingTable bindingTable));
  776. EXTERN void TkpMakeContainer _ANSI_ARGS_((Tk_Window tkwin));
  777. EXTERN void TkpMakeMenuWindow _ANSI_ARGS_((Tk_Window tkwin,
  778.     int transient));
  779. EXTERN Window TkpMakeWindow _ANSI_ARGS_((TkWindow *winPtr,
  780.     Window parent));
  781. EXTERN void TkpMenuNotifyToplevelCreate _ANSI_ARGS_((
  782.     Tcl_Interp *, char *menuName));
  783. EXTERN TkDisplay * TkpOpenDisplay _ANSI_ARGS_((char *display_name));
  784. EXTERN void TkPointerDeadWindow _ANSI_ARGS_((TkWindow *winPtr));
  785. EXTERN int TkPointerEvent _ANSI_ARGS_((XEvent *eventPtr,
  786.     TkWindow *winPtr));
  787. EXTERN int TkPolygonToArea _ANSI_ARGS_((double *polyPtr,
  788.     int numPoints, double *rectPtr));
  789. EXTERN double TkPolygonToPoint _ANSI_ARGS_((double *polyPtr,
  790.     int numPoints, double *pointPtr));
  791. EXTERN int TkPositionInTree _ANSI_ARGS_((TkWindow *winPtr,
  792.     TkWindow *treePtr));
  793. #ifndef TkpPrintWindowId
  794. EXTERN void TkpPrintWindowId _ANSI_ARGS_((char *buf,
  795.     Window window));
  796. #endif
  797. EXTERN void TkpRedirectKeyEvent _ANSI_ARGS_((TkWindow *winPtr,
  798.     XEvent *eventPtr));
  799. #ifndef TkpScanWindowId
  800. EXTERN int TkpScanWindowId _ANSI_ARGS_((Tcl_Interp *interp,
  801.     char *string, int *idPtr));
  802. #endif
  803. EXTERN void TkpSetCapture _ANSI_ARGS_((TkWindow *winPtr));
  804. EXTERN void TkpSetCursor _ANSI_ARGS_((TkpCursor cursor));
  805. EXTERN void TkpSetMainMenubar _ANSI_ARGS_((Tcl_Interp *interp,
  806.     Tk_Window tkwin, char *menuName));
  807. #ifndef TkpSync
  808. EXTERN void TkpSync _ANSI_ARGS_((Display *display));
  809. #endif
  810. EXTERN int TkpTestembedCmd _ANSI_ARGS_((ClientData clientData,
  811.     Tcl_Interp *interp, int argc, char **argv));
  812. EXTERN int TkpUseWindow _ANSI_ARGS_((Tcl_Interp *interp,
  813.     Tk_Window tkwin, char *string));
  814. #ifndef TkPutImage
  815. EXTERN void TkPutImage _ANSI_ARGS_((unsigned long *colors,
  816.     int ncolors, Display* display, Drawable d,
  817.     GC gc, XImage* image, int src_x, int src_y,
  818.     int dest_x, int dest_y, unsigned int width,
  819.     unsigned int height));
  820. #endif
  821. EXTERN int TkpWindowWasRecentlyDeleted _ANSI_ARGS_((Window win,
  822.     TkDisplay *dispPtr));
  823. EXTERN void TkpWmSetState _ANSI_ARGS_((TkWindow *winPtr,
  824.     int state));
  825. EXTERN void TkQueueEventForAllChildren _ANSI_ARGS_((
  826.     TkWindow *winPtr, XEvent *eventPtr));
  827. EXTERN int TkReadBitmapFile _ANSI_ARGS_((Display* display,
  828.     Drawable d, CONST char* filename,
  829.     unsigned int* width_return,
  830.     unsigned int* height_return,
  831.     Pixmap* bitmap_return,
  832.     int* x_hot_return, int* y_hot_return));
  833. #ifndef TkRectInRegion
  834. EXTERN int TkRectInRegion _ANSI_ARGS_((TkRegion rgn,
  835.     int x, int y, unsigned int width,
  836.     unsigned int height));
  837. #endif
  838. EXTERN int TkScrollWindow _ANSI_ARGS_((Tk_Window tkwin, GC gc,
  839.     int x, int y, int width, int height, int dx,
  840.     int dy, TkRegion damageRgn));
  841. EXTERN void TkSelDeadWindow _ANSI_ARGS_((TkWindow *winPtr));
  842. EXTERN void TkSelEventProc _ANSI_ARGS_((Tk_Window tkwin,
  843.     XEvent *eventPtr));
  844. EXTERN void TkSelInit _ANSI_ARGS_((Tk_Window tkwin));
  845. EXTERN void TkSelPropProc _ANSI_ARGS_((XEvent *eventPtr));
  846. EXTERN void TkSetClassProcs _ANSI_ARGS_((Tk_Window tkwin,
  847.     TkClassProcs *procs, ClientData instanceData));
  848. #ifndef TkSetPixmapColormap
  849. EXTERN void TkSetPixmapColormap _ANSI_ARGS_((Pixmap pixmap,
  850.     Colormap colormap));
  851. #endif
  852. #ifndef TkSetRegion
  853. EXTERN void TkSetRegion _ANSI_ARGS_((Display* display, GC gc,
  854.     TkRegion rgn));
  855. #endif
  856. EXTERN void TkSetWindowMenuBar _ANSI_ARGS_((Tcl_Interp *interp,
  857.     Tk_Window tkwin, char *oldMenuName, 
  858.     char *menuName));
  859. EXTERN KeySym TkStringToKeysym _ANSI_ARGS_((char *name));
  860. EXTERN int TkThickPolyLineToArea _ANSI_ARGS_((double *coordPtr,
  861.     int numPoints, double width, int capStyle,
  862.     int joinStyle, double *rectPtr));
  863. #ifndef TkUnionRectWithRegion
  864. EXTERN void TkUnionRectWithRegion _ANSI_ARGS_((XRectangle* rect,
  865.     TkRegion src, TkRegion dr_return));
  866. #endif
  867. EXTERN void TkWmAddToColormapWindows _ANSI_ARGS_((
  868.     TkWindow *winPtr));
  869. EXTERN void TkWmDeadWindow _ANSI_ARGS_((TkWindow *winPtr));
  870. EXTERN TkWindow * TkWmFocusToplevel _ANSI_ARGS_((TkWindow *winPtr));
  871. EXTERN void TkWmMapWindow _ANSI_ARGS_((TkWindow *winPtr));
  872. EXTERN void TkWmNewWindow _ANSI_ARGS_((TkWindow *winPtr));
  873. EXTERN void TkWmProtocolEventProc _ANSI_ARGS_((TkWindow *winPtr,
  874.     XEvent *evenvPtr));
  875. EXTERN void TkWmRemoveFromColormapWindows _ANSI_ARGS_((
  876.     TkWindow *winPtr));
  877. EXTERN void TkWmRestackToplevel _ANSI_ARGS_((TkWindow *winPtr,
  878.     int aboveBelow, TkWindow *otherPtr));
  879. EXTERN void TkWmSetClass _ANSI_ARGS_((TkWindow *winPtr));
  880. EXTERN void TkWmUnmapWindow _ANSI_ARGS_((TkWindow *winPtr));
  881. /* 
  882.  * Unsupported commands.
  883.  */
  884. EXTERN int TkUnsupported1Cmd _ANSI_ARGS_((ClientData clientData,
  885.     Tcl_Interp *interp, int argc, char **argv));
  886. # undef TCL_STORAGE_CLASS
  887. # define TCL_STORAGE_CLASS DLLIMPORT
  888. #endif  /* _TKINT */