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

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.3.2.h,v 1.2 2001/07/02 17:56:30 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. /*
  28.  * Opaque type declarations:
  29.  */
  30. typedef struct TkColormap TkColormap;
  31. typedef struct TkGrabEvent TkGrabEvent;
  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.     Display *display; /* Display containing cursor. Needed for
  74.  * disposal and retrieval of cursors. */
  75.     int resourceRefCount; /* Number of active uses of this cursor (each
  76.  * active use corresponds to a call to
  77.  * Tk_AllocPreserveFromObj or Tk_Preserve).
  78.  * If this count is 0, then this structure
  79.  * is no longer valid and it isn't present
  80.  * in a hash table: it is being kept around
  81.  * only because there are objects referring
  82.  * to it.  The structure is freed when
  83.  * resourceRefCount and objRefCount are
  84.  * both 0. */
  85.     int objRefCount; /* Number of Tcl objects that reference
  86.  * this structure.. */
  87.     Tcl_HashTable *otherTable; /* Second table (other than idTable) used
  88.  * to index this entry. */
  89.     Tcl_HashEntry *hashPtr; /* Entry in otherTable for this structure
  90.  * (needed when deleting). */
  91.     Tcl_HashEntry *idHashPtr; /* Entry in idTable for this structure
  92.  * (needed when deleting). */
  93.     struct TkCursor *nextPtr; /* Points to the next TkCursor structure with
  94.  * the same name.  Cursors with the same
  95.  * name but different displays are chained
  96.  * together off a single hash table entry. */
  97. } TkCursor;
  98. /*
  99.  * One of the following structures is maintained for each display
  100.  * containing a window managed by Tk.  In part, the structure is 
  101.  * used to store thread-specific data, since each thread will have 
  102.  * its own TkDisplay structure.
  103.  */
  104. typedef struct TkDisplay {
  105.     Display *display; /* Xlib's info about display. */
  106.     struct TkDisplay *nextPtr; /* Next in list of all displays. */
  107.     char *name; /* Name of display (with any screen
  108.  * identifier removed).  Malloc-ed. */
  109.     Time lastEventTime; /* Time of last event received for this
  110.  * display. */
  111.     /*
  112.      * Information used primarily by tk3d.c:
  113.      */
  114.     int borderInit;             /* 0 means borderTable needs initializing. */
  115.     Tcl_HashTable borderTable;  /* Maps from color name to TkBorder 
  116.  * structure. */
  117.     /*
  118.      * Information used by tkAtom.c only:
  119.      */
  120.     int atomInit; /* 0 means stuff below hasn't been
  121.  * initialized yet. */
  122.     Tcl_HashTable nameTable; /* Maps from names to Atom's. */
  123.     Tcl_HashTable atomTable; /* Maps from Atom's back to names. */
  124.     /*
  125.      * Information used primarily by tkBind.c:
  126.      */
  127.     int bindInfoStale; /* Non-zero means the variables in this
  128.  * part of the structure are potentially
  129.  * incorrect and should be recomputed. */
  130.     unsigned int modeModMask; /* Has one bit set to indicate the modifier
  131.  * corresponding to "mode shift".  If no
  132.  * such modifier, than this is zero. */
  133.     unsigned int metaModMask; /* Has one bit set to indicate the modifier
  134.  * corresponding to the "Meta" key.  If no
  135.  * such modifier, then this is zero. */
  136.     unsigned int altModMask; /* Has one bit set to indicate the modifier
  137.  * corresponding to the "Meta" key.  If no
  138.  * such modifier, then this is zero. */
  139.     enum {LU_IGNORE, LU_CAPS, LU_SHIFT} lockUsage;
  140. /* Indicates how to interpret lock modifier. */
  141.     int numModKeyCodes; /* Number of entries in modKeyCodes array
  142.  * below. */
  143.     KeyCode *modKeyCodes; /* Pointer to an array giving keycodes for
  144.  * all of the keys that have modifiers
  145.  * associated with them.  Malloc'ed, but
  146.  * may be NULL. */
  147.     /*
  148.      * Information used by tkBitmap.c only:
  149.      */
  150.   
  151.     int bitmapInit;             /* 0 means tables above need initializing. */
  152.     int bitmapAutoNumber;       /* Used to number bitmaps. */
  153.     Tcl_HashTable bitmapNameTable;    
  154.                                 /* Maps from name of bitmap to the first 
  155.  * TkBitmap record for that name. */
  156.     Tcl_HashTable bitmapIdTable;/* Maps from bitmap id to the TkBitmap
  157.  * structure for the bitmap. */
  158.     Tcl_HashTable bitmapDataTable;    
  159.                                 /* Used by Tk_GetBitmapFromData to map from
  160.  * a collection of in-core data about a 
  161.  * bitmap to a reference giving an auto-
  162.  * matically-generated name for the bitmap. */
  163.     /*
  164.      * Information used by tkCanvas.c only:
  165.      */
  166.     int numIdSearches;          
  167.     int numSlowSearches;
  168.     /*
  169.      * Used by tkColor.c only:
  170.      */
  171.     int colorInit;              /* 0 means color module needs initializing. */
  172.     TkStressedCmap *stressPtr; /* First in list of colormaps that have
  173.  * filled up, so we have to pick an
  174.  * approximate color. */
  175.     Tcl_HashTable colorNameTable;
  176.                                 /* Maps from color name to TkColor structure
  177.  * for that color. */
  178.     Tcl_HashTable colorValueTable;
  179.                                 /* Maps from integer RGB values to TkColor
  180.  * structures. */
  181.     /*
  182.      * Used by tkCursor.c only:
  183.      */
  184.     int cursorInit;             /* 0 means cursor module need initializing. */
  185.     Tcl_HashTable cursorNameTable;
  186.                                 /* Maps from a string name to a cursor to the
  187.  * TkCursor record for the cursor. */
  188.     Tcl_HashTable cursorDataTable;
  189.                                 /* Maps from a collection of in-core data
  190.  * about a cursor to a TkCursor structure. */
  191.     Tcl_HashTable cursorIdTable;
  192.                                 /* Maps from a cursor id to the TkCursor
  193.  * structure for the cursor. */
  194.     char cursorString[20];      /* Used to store a cursor id string. */
  195.     Font cursorFont; /* Font to use for standard cursors.
  196.  * None means font not loaded yet. */
  197.     /*
  198.      * Information used by tkError.c only:
  199.      */
  200.     struct TkErrorHandler *errorPtr;
  201. /* First in list of error handlers
  202.  * for this display.  NULL means
  203.  * no handlers exist at present. */
  204.     int deleteCount; /* Counts # of handlers deleted since
  205.  * last time inactive handlers were
  206.  * garbage-collected.  When this number
  207.  * gets big, handlers get cleaned up. */
  208.     /*
  209.      * Used by tkEvent.c only:
  210.      */
  211.     struct TkWindowEvent *delayedMotionPtr;
  212. /* Points to a malloc-ed motion event
  213.  * whose processing has been delayed in
  214.  * the hopes that another motion event
  215.  * will come along right away and we can
  216.  * merge the two of them together.  NULL
  217.  * means that there is no delayed motion
  218.  * event. */
  219.     /*
  220.      * Information used by tkFocus.c only:
  221.      */
  222.     int focusDebug;             /* 1 means collect focus debugging 
  223.  * statistics. */
  224.     struct TkWindow *implicitWinPtr;
  225. /* If the focus arrived at a toplevel window
  226.  * implicitly via an Enter event (rather
  227.  * than via a FocusIn event), this points
  228.  * to the toplevel window.  Otherwise it is
  229.  * NULL. */
  230.     struct TkWindow *focusPtr; /* Points to the window on this display that
  231.  * should be receiving keyboard events.  When
  232.  * multiple applications on the display have
  233.  * the focus, this will refer to the
  234.  * innermost window in the innermost
  235.  * application.  This information isn't used
  236.  * under Unix or Windows, but it's needed on
  237.  * the Macintosh. */
  238.     /*
  239.      * Information used by tkGC.c only:
  240.      */
  241.     
  242.     Tcl_HashTable gcValueTable; /* Maps from a GC's values to a TkGC structure
  243.  * describing a GC with those values. */
  244.     Tcl_HashTable gcIdTable;    /* Maps from a GC to a TkGC. */ 
  245.     int gcInit;                 /* 0 means the tables below need 
  246.  * initializing. */
  247.     /*
  248.      * Information used by tkGeometry.c only:
  249.      */
  250.     Tcl_HashTable maintainHashTable;
  251.                                 /* Hash table that maps from a master's 
  252.  * Tk_Window token to a list of slaves
  253.  * managed by that master. */
  254.     int geomInit;    
  255.     /*
  256.      * Information used by tkGet.c only:
  257.      */
  258.   
  259.     Tcl_HashTable uidTable;     /* Stores all Tk_Uid  used in a thread. */
  260.     int uidInit;                /* 0 means uidTable needs initializing. */
  261.     /*
  262.      * Information used by tkGrab.c only:
  263.      */
  264.     struct TkWindow *grabWinPtr;
  265. /* Window in which the pointer is currently
  266.  * grabbed, or NULL if none. */
  267.     struct TkWindow *eventualGrabWinPtr;
  268. /* Value that grabWinPtr will have once the
  269.  * grab event queue (below) has been
  270.  * completely emptied. */
  271.     struct TkWindow *buttonWinPtr;
  272. /* Window in which first mouse button was
  273.  * pressed while grab was in effect, or NULL
  274.  * if no such press in effect. */
  275.     struct TkWindow *serverWinPtr;
  276. /* If no application contains the pointer then
  277.  * this is NULL.  Otherwise it contains the
  278.  * last window for which we've gotten an
  279.  * Enter or Leave event from the server (i.e.
  280.  * the last window known to have contained
  281.  * the pointer).  Doesn't reflect events
  282.  * that were synthesized in tkGrab.c. */
  283.     TkGrabEvent *firstGrabEventPtr;
  284. /* First in list of enter/leave events
  285.  * synthesized by grab code.  These events
  286.  * must be processed in order before any other
  287.  * events are processed.  NULL means no such
  288.  * events. */
  289.     TkGrabEvent *lastGrabEventPtr;
  290. /* Last in list of synthesized events, or NULL
  291.  * if list is empty. */
  292.     int grabFlags; /* Miscellaneous flag values.  See definitions
  293.  * in tkGrab.c. */
  294.     /*
  295.      * Information used by tkGrid.c only:
  296.      */
  297.     int gridInit;               /* 0 means table below needs initializing. */
  298.     Tcl_HashTable gridHashTable;/* Maps from Tk_Window tokens to 
  299.  * corresponding Grid structures. */
  300.     /*
  301.      * Information used by tkImage.c only:
  302.      */
  303.     int imageId;                /* Value used to number image ids. */
  304.     /*
  305.      * Information used by tkMacWinMenu.c only:
  306.      */
  307.     int postCommandGeneration;  
  308.     /*
  309.      * Information used by tkOption.c only.
  310.      */
  311.     /*
  312.      * Information used by tkPack.c only.
  313.      */
  314.     int packInit;              /* 0 means table below needs initializing. */
  315.     Tcl_HashTable packerHashTable;
  316.                                /* Maps from Tk_Window tokens to 
  317. * corresponding Packer structures. */
  318.     
  319.     /*
  320.      * Information used by tkPlace.c only.
  321.      */
  322.     int placeInit;              /* 0 means tables below need initializing. */
  323.     Tcl_HashTable masterTable;  /* Maps from Tk_Window toke to the Master
  324.  * structure for the window, if it exists. */
  325.     Tcl_HashTable slaveTable;   /* Maps from Tk_Window toke to the Slave
  326.  * structure for the window, if it exists. */
  327.     /*
  328.      * Information used by tkSelect.c and tkClipboard.c only:
  329.      */
  330.     struct TkSelectionInfo *selectionInfoPtr;
  331. /* First in list of selection information
  332.  * records.  Each entry contains information
  333.  * about the current owner of a particular
  334.  * selection on this display. */
  335.     Atom multipleAtom; /* Atom for MULTIPLE.  None means
  336.  * selection stuff isn't initialized. */
  337.     Atom incrAtom; /* Atom for INCR. */
  338.     Atom targetsAtom; /* Atom for TARGETS. */
  339.     Atom timestampAtom; /* Atom for TIMESTAMP. */
  340.     Atom textAtom; /* Atom for TEXT. */
  341.     Atom compoundTextAtom; /* Atom for COMPOUND_TEXT. */
  342.     Atom applicationAtom; /* Atom for TK_APPLICATION. */
  343.     Atom windowAtom; /* Atom for TK_WINDOW. */
  344.     Atom clipboardAtom; /* Atom for CLIPBOARD. */
  345.     Tk_Window clipWindow; /* Window used for clipboard ownership and to
  346.  * retrieve selections between processes. NULL
  347.  * means clipboard info hasn't been
  348.  * initialized. */
  349.     int clipboardActive; /* 1 means we currently own the clipboard
  350.  * selection, 0 means we don't. */
  351.     struct TkMainInfo *clipboardAppPtr;
  352. /* Last application that owned clipboard. */
  353.     struct TkClipboardTarget *clipTargetPtr;
  354. /* First in list of clipboard type information
  355.  * records.  Each entry contains information
  356.  * about the buffers for a given selection
  357.  * target. */
  358.     /*
  359.      * Information used by tkSend.c only:
  360.      */
  361.     Tk_Window commTkwin; /* Window used for communication
  362.  * between interpreters during "send"
  363.  * commands.  NULL means send info hasn't
  364.  * been initialized yet. */
  365.     Atom commProperty; /* X's name for comm property. */
  366.     Atom registryProperty; /* X's name for property containing
  367.  * registry of interpreter names. */
  368.     Atom appNameProperty; /* X's name for property used to hold the
  369.  * application name on each comm window. */
  370.     /*
  371.      * Information used by tkXId.c only:
  372.      */
  373.     struct TkIdStack *idStackPtr;
  374. /* First in list of chunks of free resource
  375.  * identifiers, or NULL if there are no free
  376.  * resources. */
  377.     XID (*defaultAllocProc) _ANSI_ARGS_((Display *display));
  378. /* Default resource allocator for display. */
  379.     struct TkIdStack *windowStackPtr;
  380. /* First in list of chunks of window
  381.  * identifers that can't be reused right
  382.  * now. */
  383.     int idCleanupScheduled; /* 1 means a call to WindowIdCleanup has
  384.  * already been scheduled, 0 means it
  385.  * hasn't. */
  386.     /*
  387.      * Information used by tkUnixWm.c and tkWinWm.c only:
  388.      */
  389.     int wmTracing;              /* Used to enable or disable tracing in 
  390.  * this module.  If tracing is enabled, 
  391.  * then information is printed on
  392.  * standard output about interesting 
  393.  * interactions with the window manager. */
  394.     struct TkWmInfo *firstWmPtr;  /* Points to first top-level window. */
  395.     struct TkWmInfo *foregroundWmPtr;    
  396.                                 /* Points to the foreground window. */
  397.     /*
  398.      * Information maintained by tkWindow.c for use later on by tkXId.c:
  399.      */
  400.     int destroyCount; /* Number of Tk_DestroyWindow operations
  401.  * in progress. */
  402.     unsigned long lastDestroyRequest;
  403. /* Id of most recent XDestroyWindow request;
  404.  * can re-use ids in windowStackPtr when
  405.  * server has seen this request and event
  406.  * queue is empty. */
  407.     /*
  408.      * Information used by tkVisual.c only:
  409.      */
  410.     TkColormap *cmapPtr; /* First in list of all non-default colormaps
  411.  * allocated for this display. */
  412.     /*
  413.      * Miscellaneous information:
  414.      */
  415. #ifdef TK_USE_INPUT_METHODS
  416.     XIM inputMethod; /* Input method for this display */
  417. #endif /* TK_USE_INPUT_METHODS */
  418.     Tcl_HashTable winTable; /* Maps from X window ids to TkWindow ptrs. */
  419.     int refCount; /* Reference count of how many Tk applications
  420.                                  * are using this display. Used to clean up
  421.                                  * the display when we no longer have any
  422.                                  * Tk applications using it.
  423.                                  */
  424.     /*
  425.      * The following field were all added for Tk8.3
  426.      */
  427.     int mouseButtonState; /* current mouse button state for this
  428.  * display */
  429.     int warpInProgress;
  430.     Window warpWindow;
  431.     int warpX;
  432.     int warpY;
  433.     int useInputMethods; /* Whether to use input methods */
  434. } TkDisplay;
  435. /*
  436.  * One of the following structures exists for each error handler
  437.  * created by a call to Tk_CreateErrorHandler.  The structure
  438.  * is managed by tkError.c.
  439.  */
  440. typedef struct TkErrorHandler {
  441.     TkDisplay *dispPtr; /* Display to which handler applies. */
  442.     unsigned long firstRequest; /* Only errors with serial numbers
  443.  * >= to this are considered. */
  444.     unsigned long lastRequest; /* Only errors with serial numbers
  445.  * <= to this are considered.  This
  446.  * field is filled in when XUnhandle
  447.  * is called.  -1 means XUnhandle
  448.  * hasn't been called yet. */
  449.     int error; /* Consider only errors with this
  450.  * error_code (-1 means consider
  451.  * all errors). */
  452.     int request; /* Consider only errors with this
  453.  * major request code (-1 means
  454.  * consider all major codes). */
  455.     int minorCode; /* Consider only errors with this
  456.  * minor request code (-1 means
  457.  * consider all minor codes). */
  458.     Tk_ErrorProc *errorProc; /* Procedure to invoke when a matching
  459.  * error occurs.  NULL means just ignore
  460.  * errors. */
  461.     ClientData clientData; /* Arbitrary value to pass to
  462.  * errorProc. */
  463.     struct TkErrorHandler *nextPtr;
  464. /* Pointer to next older handler for
  465.  * this display, or NULL for end of
  466.  * list. */
  467. } TkErrorHandler;
  468. /*
  469.  * One of the following structures exists for each event handler
  470.  * created by calling Tk_CreateEventHandler.  This information
  471.  * is used by tkEvent.c only.
  472.  */
  473. typedef struct TkEventHandler {
  474.     unsigned long mask; /* Events for which to invoke
  475.  * proc. */
  476.     Tk_EventProc *proc; /* Procedure to invoke when an event
  477.  * in mask occurs. */
  478.     ClientData clientData; /* Argument to pass to proc. */
  479.     struct TkEventHandler *nextPtr;
  480. /* Next in list of handlers
  481.  * associated with window (NULL means
  482.  * end of list). */
  483. } TkEventHandler;
  484. /*
  485.  * Tk keeps one of the following data structures for each main
  486.  * window (created by a call to TkCreateMainWindow).  It stores
  487.  * information that is shared by all of the windows associated
  488.  * with a particular main window.
  489.  */
  490. typedef struct TkMainInfo {
  491.     int refCount; /* Number of windows whose "mainPtr" fields
  492.  * point here.  When this becomes zero, can
  493.  * free up the structure (the reference
  494.  * count is zero because windows can get
  495.  * deleted in almost any order;  the main
  496.  * window isn't necessarily the last one
  497.  * deleted). */
  498.     struct TkWindow *winPtr; /* Pointer to main window. */
  499.     Tcl_Interp *interp; /* Interpreter associated with application. */
  500.     Tcl_HashTable nameTable; /* Hash table mapping path names to TkWindow
  501.  * structs for all windows related to this
  502.  * main window.  Managed by tkWindow.c. */
  503.     Tk_BindingTable bindingTable;
  504. /* Used in conjunction with "bind" command
  505.  * to bind events to Tcl commands. */
  506.     TkBindInfo bindInfo; /* Information used by tkBind.c on a per
  507.  * application basis. */
  508.     struct TkFontInfo *fontInfoPtr;
  509. /* Information used by tkFont.c on a per
  510.  * application basis. */
  511.     /*
  512.      * Information used only by tkFocus.c and tk*Embed.c:
  513.      */
  514.     struct TkToplevelFocusInfo *tlFocusPtr;
  515. /* First in list of records containing focus
  516.  * information for each top-level in the
  517.  * application.  Used only by tkFocus.c. */
  518.     struct TkDisplayFocusInfo *displayFocusPtr;
  519. /* First in list of records containing focus
  520.  * information for each display that this
  521.  * application has ever used.  Used only
  522.  * by tkFocus.c. */
  523.     struct ElArray *optionRootPtr;
  524. /* Top level of option hierarchy for this
  525.  * main window.  NULL means uninitialized.
  526.  * Managed by tkOption.c. */
  527.     Tcl_HashTable imageTable; /* Maps from image names to Tk_ImageMaster
  528.  * structures.  Managed by tkImage.c. */
  529.     int strictMotif; /* This is linked to the tk_strictMotif
  530.  * global variable. */
  531.     struct TkMainInfo *nextPtr; /* Next in list of all main windows managed by
  532.  * this process. */
  533. } TkMainInfo;
  534. /*
  535.  * Tk keeps the following data structure for each of it's builtin
  536.  * bitmaps.  This structure is only used by tkBitmap.c and other
  537.  * platform specific bitmap files.
  538.  */
  539. typedef struct {
  540.     char *source; /* Bits for bitmap. */
  541.     int width, height; /* Dimensions of bitmap. */
  542.     int native; /* 0 means generic (X style) bitmap,
  543.       * 1 means native style bitmap. */
  544. } TkPredefBitmap;
  545. /*
  546.  * Tk keeps one of the following structures for each window.
  547.  * Some of the information (like size and location) is a shadow
  548.  * of information managed by the X server, and some is special
  549.  * information used here, such as event and geometry management
  550.  * information.  This information is (mostly) managed by tkWindow.c.
  551.  * WARNING: the declaration below must be kept consistent with the
  552.  * Tk_FakeWin structure in tk.h.  If you change one, be sure to
  553.  * change the other!!
  554.  */
  555. typedef struct TkWindow {
  556.     /*
  557.      * Structural information:
  558.      */
  559.     Display *display; /* Display containing window. */
  560.     TkDisplay *dispPtr; /* Tk's information about display
  561.  * for window. */
  562.     int screenNum; /* Index of screen for window, among all
  563.  * those for dispPtr. */
  564.     Visual *visual; /* Visual to use for window.  If not default,
  565.  * MUST be set before X window is created. */
  566.     int depth; /* Number of bits/pixel. */
  567.     Window window; /* X's id for window.   NULL means window
  568.  * hasn't actually been created yet, or it's
  569.  * been deleted. */
  570.     struct TkWindow *childList; /* First in list of child windows,
  571.  * or NULL if no children.  List is in
  572.  * stacking order, lowest window first.*/
  573.     struct TkWindow *lastChildPtr;
  574. /* Last in list of child windows (highest
  575.  * in stacking order), or NULL if no
  576.  * children. */
  577.     struct TkWindow *parentPtr; /* Pointer to parent window (logical
  578.  * parent, not necessarily X parent).  NULL
  579.  * means either this is the main window, or
  580.  * the window's parent has already been
  581.  * deleted. */
  582.     struct TkWindow *nextPtr; /* Next higher sibling (in stacking order)
  583.  * in list of children with same parent.  NULL
  584.  * means end of list. */
  585.     TkMainInfo *mainPtr; /* Information shared by all windows
  586.  * associated with a particular main
  587.  * window.  NULL means this window is
  588.  * a rogue that isn't associated with
  589.  * any application (at present, this
  590.  * only happens for the dummy windows
  591.  * used for "send" communication).  */
  592.     /*
  593.      * Name and type information for the window:
  594.      */
  595.     char *pathName; /* Path name of window (concatenation
  596.  * of all names between this window and
  597.  * its top-level ancestor).  This is a
  598.  * pointer into an entry in
  599.  * mainPtr->nameTable.  NULL means that
  600.  * the window hasn't been completely
  601.  * created yet. */
  602.     Tk_Uid nameUid; /* Name of the window within its parent
  603.  * (unique within the parent). */
  604.     Tk_Uid classUid; /* Class of the window.  NULL means window
  605.  * hasn't been given a class yet. */
  606.     /*
  607.      * Geometry and other attributes of window.  This information
  608.      * may not be updated on the server immediately;  stuff that
  609.      * hasn't been reflected in the server yet is called "dirty".
  610.      * At present, information can be dirty only if the window
  611.      * hasn't yet been created.
  612.      */
  613.     XWindowChanges changes; /* Geometry and other info about
  614.  * window. */
  615.     unsigned int dirtyChanges; /* Bits indicate fields of "changes"
  616.  * that are dirty. */
  617.     XSetWindowAttributes atts; /* Current attributes of window. */
  618.     unsigned long dirtyAtts; /* Bits indicate fields of "atts"
  619.  * that are dirty. */
  620.     unsigned int flags; /* Various flag values:  these are all
  621.  * defined in tk.h (confusing, but they're
  622.  * needed there for some query macros). */
  623.     /*
  624.      * Information kept by the event manager (tkEvent.c):
  625.      */
  626.     TkEventHandler *handlerList;/* First in list of event handlers
  627.  * declared for this window, or
  628.  * NULL if none. */
  629. #ifdef TK_USE_INPUT_METHODS
  630.     XIC inputContext; /* Input context (for input methods). */
  631. #endif /* TK_USE_INPUT_METHODS */
  632.     /*
  633.      * Information used for event bindings (see "bind" and "bindtags"
  634.      * commands in tkCmds.c):
  635.      */
  636.     ClientData *tagPtr; /* Points to array of tags used for bindings
  637.  * on this window.  Each tag is a Tk_Uid.
  638.  * Malloc'ed.  NULL means no tags. */
  639.     int numTags; /* Number of tags at *tagPtr. */
  640.     /*
  641.      * Information used by tkOption.c to manage options for the
  642.      * window.
  643.      */
  644.     int optionLevel; /* -1 means no option information is
  645.  * currently cached for this window.
  646.  * Otherwise this gives the level in
  647.  * the option stack at which info is
  648.  * cached. */
  649.     /*
  650.      * Information used by tkSelect.c to manage the selection.
  651.      */
  652.     struct TkSelHandler *selHandlerList;
  653. /* First in list of handlers for
  654.  * returning the selection in various
  655.  * forms. */
  656.     /*
  657.      * Information used by tkGeometry.c for geometry management.
  658.      */
  659.     Tk_GeomMgr *geomMgrPtr; /* Information about geometry manager for
  660.  * this window. */
  661.     ClientData geomData; /* Argument for geometry manager procedures. */
  662.     int reqWidth, reqHeight; /* Arguments from last call to
  663.  * Tk_GeometryRequest, or 0's if
  664.  * Tk_GeometryRequest hasn't been
  665.  * called. */
  666.     int internalBorderWidth; /* Width of internal border of window
  667.  * (0 means no internal border).  Geometry
  668.  * managers should not normally place children
  669.  * on top of the border. */
  670.     /*
  671.      * Information maintained by tkWm.c for window manager communication.
  672.      */
  673.     struct TkWmInfo *wmInfoPtr; /* For top-level windows (and also
  674.  * for special Unix menubar and wrapper
  675.  * windows), points to structure with
  676.  * wm-related info (see tkWm.c).  For
  677.  * other windows, this is NULL. */
  678.     /*
  679.      * Information used by widget classes.
  680.      */
  681.     TkClassProcs *classProcsPtr;
  682.     ClientData instanceData;
  683.     /*
  684.      * Platform specific information private to each port.
  685.      */
  686.     struct TkWindowPrivate *privatePtr;
  687. } TkWindow;
  688. /*
  689.  * The following structure is used as a two way map between integers
  690.  * and strings, usually to map between an internal C representation
  691.  * and the strings used in Tcl.
  692.  */
  693. typedef struct TkStateMap {
  694.     int numKey; /* Integer representation of a value. */
  695.     char *strKey; /* String representation of a value. */
  696. } TkStateMap;
  697. /*
  698.  * This structure is used by the Mac and Window porting layers as
  699.  * the internal representation of a clip_mask in a GC.
  700.  */
  701. typedef struct TkpClipMask {
  702.     int type; /* One of TKP_CLIP_PIXMAP or TKP_CLIP_REGION */
  703.     union {
  704. Pixmap pixmap;
  705. TkRegion region;
  706.     } value;
  707. } TkpClipMask;
  708. #define TKP_CLIP_PIXMAP 0
  709. #define TKP_CLIP_REGION 1
  710. /*
  711.  * Pointer to first entry in list of all displays currently known.
  712.  */
  713. extern TkDisplay *tkDisplayList;
  714. /*
  715.  * Return values from TkGrabState:
  716.  */
  717. #define TK_GRAB_NONE 0
  718. #define TK_GRAB_IN_TREE 1
  719. #define TK_GRAB_ANCESTOR 2
  720. #define TK_GRAB_EXCLUDED 3
  721. /*
  722.  * The macro below is used to modify a "char" value (e.g. by casting
  723.  * it to an unsigned character) so that it can be used safely with
  724.  * macros such as isspace.
  725.  */
  726. #define UCHAR(c) ((unsigned char) (c))
  727. /*
  728.  * The following symbol is used in the mode field of FocusIn events
  729.  * generated by an embedded application to request the input focus from
  730.  * its container.
  731.  */
  732. #define EMBEDDED_APP_WANTS_FOCUS (NotifyNormal + 20)
  733. /*
  734.  * The following special modifier mask bits are defined, to indicate
  735.  * logical modifiers such as Meta and Alt that may float among the
  736.  * actual modifier bits.
  737.  */
  738. #define META_MASK (AnyModifier<<1)
  739. #define ALT_MASK (AnyModifier<<2)
  740. /*
  741.  * Miscellaneous variables shared among Tk modules but not exported
  742.  * to the outside world:
  743.  */
  744. extern Tk_SmoothMethod tkBezierSmoothMethod;
  745. extern Tk_ImageType tkBitmapImageType;
  746. extern Tk_PhotoImageFormat tkImgFmtGIF;
  747. extern void (*tkHandleEventProc) _ANSI_ARGS_((
  748.          XEvent* eventPtr));
  749. extern Tk_PhotoImageFormat tkImgFmtPPM;
  750. extern TkMainInfo *tkMainWindowList;
  751. extern Tk_ImageType tkPhotoImageType;
  752. extern Tcl_HashTable tkPredefBitmapTable;
  753. extern int tkSendSerial;
  754. #include "tkIntDecls.h"
  755. #ifdef BUILD_tk
  756. # undef TCL_STORAGE_CLASS
  757. # define TCL_STORAGE_CLASS DLLEXPORT
  758. #endif
  759. /*
  760.  * Internal procedures shared among Tk modules but not exported
  761.  * to the outside world:
  762.  */
  763. EXTERN int Tk_AfterCmd _ANSI_ARGS_((ClientData clientData,
  764.     Tcl_Interp *interp, int argc, char **argv));
  765. EXTERN int Tk_BellObjCmd _ANSI_ARGS_((ClientData clientData,
  766.     Tcl_Interp *interp, int objc, 
  767.     Tcl_Obj *CONST objv[]));
  768. EXTERN int Tk_BindCmd _ANSI_ARGS_((ClientData clientData,
  769.     Tcl_Interp *interp, int argc, char **argv));
  770. EXTERN int Tk_BindtagsCmd _ANSI_ARGS_((ClientData clientData,
  771.     Tcl_Interp *interp, int argc, char **argv));
  772. EXTERN int Tk_ButtonObjCmd _ANSI_ARGS_((ClientData clientData,
  773.     Tcl_Interp *interp, int objc,
  774.     Tcl_Obj *CONST objv[]));
  775. EXTERN int Tk_CanvasObjCmd _ANSI_ARGS_((ClientData clientData,
  776.     Tcl_Interp *interp, int argc, Tcl_Obj *CONST objv[]));
  777. EXTERN int Tk_CheckbuttonObjCmd _ANSI_ARGS_((ClientData clientData,
  778.     Tcl_Interp *interp, int objc,
  779.     Tcl_Obj *CONST objv[]));
  780. EXTERN int Tk_ClipboardCmd _ANSI_ARGS_((ClientData clientData,
  781.     Tcl_Interp *interp, int argc, char **argv));
  782. EXTERN int              Tk_ChooseColorObjCmd _ANSI_ARGS_((
  783.     ClientData clientData, Tcl_Interp *interp,
  784.     int objc, Tcl_Obj *CONST objv[]));
  785. EXTERN int              Tk_ChooseDirectoryObjCmd _ANSI_ARGS_((
  786.     ClientData clientData, Tcl_Interp *interp,
  787.     int objc, Tcl_Obj *CONST objv[]));
  788. EXTERN int              Tk_ChooseFontObjCmd _ANSI_ARGS_((ClientData clientData,
  789.     Tcl_Interp *interp, int objc, 
  790.     Tcl_Obj *CONST objv[]));
  791. EXTERN int Tk_DestroyObjCmd _ANSI_ARGS_((ClientData clientData,
  792.     Tcl_Interp *interp, int objc, 
  793.     Tcl_Obj *CONST objv[]));
  794. EXTERN int Tk_EntryObjCmd _ANSI_ARGS_((ClientData clientData,
  795.     Tcl_Interp *interp, int objc, 
  796.                             Tcl_Obj *CONST objv[]));
  797. EXTERN int Tk_EventObjCmd _ANSI_ARGS_((ClientData clientData,
  798.     Tcl_Interp *interp, int objc,
  799.     Tcl_Obj *CONST objv[]));
  800. EXTERN int Tk_FileeventCmd _ANSI_ARGS_((ClientData clientData,
  801.     Tcl_Interp *interp, int argc, char **argv));
  802. EXTERN int Tk_FrameObjCmd _ANSI_ARGS_((ClientData clientData,
  803.     Tcl_Interp *interp, int objc,
  804.     Tcl_Obj *CONST objv[]));
  805. EXTERN int Tk_FocusObjCmd _ANSI_ARGS_((ClientData clientData,
  806.     Tcl_Interp *interp, int objc, 
  807.     Tcl_Obj *CONST objv[]));
  808. EXTERN int Tk_FontObjCmd _ANSI_ARGS_((ClientData clientData,
  809.     Tcl_Interp *interp, int objc, 
  810.     Tcl_Obj *CONST objv[]));
  811. EXTERN int              Tk_GetOpenFileObjCmd _ANSI_ARGS_((ClientData clientData,
  812.     Tcl_Interp *interp, int objc, 
  813.     Tcl_Obj *CONST objv[]));
  814. EXTERN int              Tk_GetSaveFileObjCmd _ANSI_ARGS_((ClientData clientData,
  815.     Tcl_Interp *interp, int objc, 
  816.     Tcl_Obj *CONST objv[]));
  817. EXTERN int Tk_GrabCmd _ANSI_ARGS_((ClientData clientData,
  818.     Tcl_Interp *interp, int argc, char **argv));
  819. EXTERN int Tk_GridCmd _ANSI_ARGS_((ClientData clientData,
  820.     Tcl_Interp *interp, int argc, char **argv));
  821. EXTERN int Tk_ImageObjCmd _ANSI_ARGS_((ClientData clientData,
  822.     Tcl_Interp *interp, int objc, 
  823.     Tcl_Obj *CONST objv[]));
  824. EXTERN int Tk_LabelObjCmd _ANSI_ARGS_((ClientData clientData,
  825.     Tcl_Interp *interp, int objc,
  826.     Tcl_Obj *CONST objv[]));
  827. EXTERN int Tk_ListboxObjCmd _ANSI_ARGS_((ClientData clientData,
  828.     Tcl_Interp *interp, int objc,
  829.     Tcl_Obj *CONST objv[]));
  830. EXTERN int Tk_LowerObjCmd _ANSI_ARGS_((ClientData clientData,
  831.     Tcl_Interp *interp, int objc,
  832.     Tcl_Obj *CONST objv[]));
  833. EXTERN int Tk_MenubuttonObjCmd _ANSI_ARGS_((ClientData clientData,
  834.     Tcl_Interp *interp, int objc, 
  835.     Tcl_Obj *CONST objv[]));
  836. EXTERN int              Tk_MessageBoxObjCmd _ANSI_ARGS_((ClientData clientData,
  837.                             Tcl_Interp *interp, int objc, 
  838.     Tcl_Obj *CONST objv[]));
  839. EXTERN int Tk_MessageCmd _ANSI_ARGS_((ClientData clientData,
  840.     Tcl_Interp *interp, int argc, char **argv));
  841. EXTERN int Tk_OptionObjCmd _ANSI_ARGS_((ClientData clientData,
  842.     Tcl_Interp *interp, int objc,
  843.                     Tcl_Obj *CONST objv[]));
  844. EXTERN int Tk_PackCmd _ANSI_ARGS_((ClientData clientData,
  845.     Tcl_Interp *interp, int argc, char **argv));
  846. EXTERN int Tk_PlaceCmd _ANSI_ARGS_((ClientData clientData,
  847.     Tcl_Interp *interp, int argc, char **argv));
  848. EXTERN int Tk_RadiobuttonObjCmd _ANSI_ARGS_((ClientData clientData,
  849.     Tcl_Interp *interp, int objc,
  850.     Tcl_Obj *CONST objv[]));
  851. EXTERN int Tk_RaiseObjCmd _ANSI_ARGS_((ClientData clientData,
  852.     Tcl_Interp *interp, int objc,
  853.     Tcl_Obj *CONST objv[]));
  854. EXTERN int Tk_ScaleObjCmd _ANSI_ARGS_((ClientData clientData,
  855.     Tcl_Interp *interp, int objc, 
  856.                             Tcl_Obj *CONST objv[]));
  857. EXTERN int Tk_ScrollbarCmd _ANSI_ARGS_((ClientData clientData,
  858.     Tcl_Interp *interp, int argc, char **argv));
  859. EXTERN int Tk_SelectionCmd _ANSI_ARGS_((ClientData clientData,
  860.     Tcl_Interp *interp, int argc, char **argv));
  861. EXTERN int Tk_SendCmd _ANSI_ARGS_((ClientData clientData,
  862.     Tcl_Interp *interp, int argc, char **argv));
  863. EXTERN int Tk_SendObjCmd _ANSI_ARGS_((ClientData clientData,
  864.     Tcl_Interp *interp, int objc, 
  865.     Tcl_Obj *CONST objv[]));
  866. EXTERN int Tk_TextCmd _ANSI_ARGS_((ClientData clientData,
  867.     Tcl_Interp *interp, int argc, char **argv));
  868. EXTERN int Tk_TkObjCmd _ANSI_ARGS_((ClientData clientData,
  869.     Tcl_Interp *interp, int objc,
  870.     Tcl_Obj *CONST objv[]));
  871. EXTERN int Tk_TkwaitCmd _ANSI_ARGS_((ClientData clientData,
  872.     Tcl_Interp *interp, int argc, char **argv));
  873. EXTERN int Tk_ToplevelObjCmd _ANSI_ARGS_((ClientData clientData,
  874.     Tcl_Interp *interp, int objc,
  875.     Tcl_Obj *CONST objv[]));
  876. EXTERN int Tk_UpdateObjCmd _ANSI_ARGS_((ClientData clientData,
  877.     Tcl_Interp *interp, int objc, 
  878.     Tcl_Obj *CONST objv[]));
  879. EXTERN int Tk_WinfoObjCmd _ANSI_ARGS_((ClientData clientData,
  880.     Tcl_Interp *interp, int objc,
  881.     Tcl_Obj *CONST objv[]));
  882. EXTERN int Tk_WmCmd _ANSI_ARGS_((ClientData clientData,
  883.     Tcl_Interp *interp, int argc, char **argv));
  884. void TkConsolePrint _ANSI_ARGS_((Tcl_Interp *interp,
  885.     int devId, char *buffer, long size));
  886. EXTERN void TkEventInit _ANSI_ARGS_((void));
  887. EXTERN int TkCreateMenuCmd _ANSI_ARGS_((Tcl_Interp *interp));
  888. EXTERN int TkDeadAppCmd _ANSI_ARGS_((ClientData clientData,
  889.     Tcl_Interp *interp, int argc, char **argv));
  890. EXTERN int TkpTestembedCmd _ANSI_ARGS_((ClientData clientData,
  891.     Tcl_Interp *interp, int argc, char **argv));
  892. EXTERN int TkCanvasGetCoordObj _ANSI_ARGS_((Tcl_Interp *interp,
  893.     Tk_Canvas canvas, Tcl_Obj *obj,
  894.     double *doublePtr));
  895. EXTERN int TkCanvasDashParseProc _ANSI_ARGS_((
  896.     ClientData clientData, Tcl_Interp *interp,
  897.     Tk_Window tkwin, CONST char *value, char *widgRec,
  898.     int offset));
  899. EXTERN char * TkCanvasDashPrintProc _ANSI_ARGS_((
  900.     ClientData clientData, Tk_Window tkwin,
  901.     char *widgRec, int offset,
  902.     Tcl_FreeProc **freeProcPtr));
  903. EXTERN int TkGetDoublePixels _ANSI_ARGS_((Tcl_Interp *interp,
  904.     Tk_Window tkwin, CONST char *string,
  905.     double *doublePtr));
  906. EXTERN int TkOffsetParseProc _ANSI_ARGS_((
  907.     ClientData clientData, Tcl_Interp *interp,
  908.     Tk_Window tkwin, CONST char *value, char *widgRec,
  909.     int offset));
  910. EXTERN char * TkOffsetPrintProc _ANSI_ARGS_((
  911.     ClientData clientData, Tk_Window tkwin,
  912.     char *widgRec, int offset,
  913.     Tcl_FreeProc **freeProcPtr));
  914. EXTERN int TkOrientParseProc _ANSI_ARGS_((
  915.     ClientData clientData, Tcl_Interp *interp,
  916.     Tk_Window tkwin, CONST char *value,
  917.     char *widgRec, int offset));
  918. EXTERN char * TkOrientPrintProc _ANSI_ARGS_((
  919.     ClientData clientData, Tk_Window tkwin,
  920.     char *widgRec, int offset,
  921.     Tcl_FreeProc **freeProcPtr));
  922. EXTERN int TkPixelParseProc _ANSI_ARGS_((
  923.     ClientData clientData, Tcl_Interp *interp,
  924.     Tk_Window tkwin, CONST char *value, char *widgRec,
  925.     int offset));
  926. EXTERN char * TkPixelPrintProc _ANSI_ARGS_((
  927.     ClientData clientData, Tk_Window tkwin,
  928.     char *widgRec, int offset,
  929.     Tcl_FreeProc **freeProcPtr));
  930. EXTERN int TkPostscriptImage _ANSI_ARGS_((Tcl_Interp *interp,
  931.     Tk_Window tkwin, Tk_PostscriptInfo psInfo,
  932.     XImage *ximage, int x, int y, int width,
  933.     int height));
  934. EXTERN int TkSmoothParseProc _ANSI_ARGS_((ClientData clientData,
  935.     Tcl_Interp *interp, Tk_Window tkwin,
  936.     CONST char *value, char *recordPtr, int offset));
  937. EXTERN char * TkSmoothPrintProc _ANSI_ARGS_((ClientData clientData,
  938.     Tk_Window tkwin, char *recordPtr, int offset,
  939.     Tcl_FreeProc **freeProcPtr));
  940. EXTERN int TkStateParseProc _ANSI_ARGS_((
  941.     ClientData clientData, Tcl_Interp *interp,
  942.     Tk_Window tkwin, CONST char *value,
  943.     char *widgRec, int offset));
  944. EXTERN char * TkStatePrintProc _ANSI_ARGS_((
  945.     ClientData clientData, Tk_Window tkwin,
  946.     char *widgRec, int offset,
  947.     Tcl_FreeProc **freeProcPtr));
  948. EXTERN int TkTileParseProc _ANSI_ARGS_((
  949.     ClientData clientData, Tcl_Interp *interp,
  950.     Tk_Window tkwin, CONST char *value, char *widgRec,
  951.     int offset));
  952. EXTERN char * TkTilePrintProc _ANSI_ARGS_((
  953.     ClientData clientData, Tk_Window tkwin,
  954.     char *widgRec, int offset,
  955.     Tcl_FreeProc **freeProcPtr));
  956. /* 
  957.  * Unsupported commands.
  958.  */
  959. EXTERN int TkUnsupported1Cmd _ANSI_ARGS_((ClientData clientData,
  960.     Tcl_Interp *interp, int argc, char **argv));
  961. # undef TCL_STORAGE_CLASS
  962. # define TCL_STORAGE_CLASS DLLIMPORT
  963. #endif  /* _TKINT */