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

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