tk.h revision 3f54fd611f536639ec30dd53c48e5ec1897cc7d9
/*
* tk.h --
*
* Declarations for Tk-related things that are visible
* outside of the Tk module itself.
*
* Copyright (c) 1989-1994 The Regents of the University of California.
* Copyright (c) 1994 The Australian National University.
* Copyright (c) 1994-1996 Sun Microsystems, Inc.
*
* See the file "license.terms" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
* SCCS: @(#) tk.h 1.195 97/01/29 17:45:58
*/
#ifndef _TK
#define _TK
/*
* When version numbers change here, must also go into the following files
* and update the version numbers:
*
*
* The release level should be 0 for alpha, 1 for beta, and 2 for
* "a", "b", or "p" in the patch level; for example, if the patch level
* is 4.3b2, TK_RELEASE_SERIAL is 2. It restarts at 1 whenever the
* release level is changed, except for the final release, which should
* be 0.
*/
#define TK_MAJOR_VERSION 4
#define TK_MINOR_VERSION 2
#define TK_RELEASE_LEVEL 2
#define TK_RELEASE_SERIAL 2
#define TK_VERSION "4.2"
#define TK_PATCH_LEVEL "4.2p2"
/*
* A special definition used to allow this header file to be included
* in resource files.
*/
#ifndef RESOURCE_INCLUDED
/*
* The following definitions set up the proper options for Macintosh
* compilers. We use this method because there is no autoconf equivalent.
*/
#ifdef MAC_TCL
# ifndef REDO_KEYSYM_LOOKUP
# define REDO_KEYSYM_LOOKUP
# endif
#endif
#ifndef _TCL
# include <tcl.h>
#endif
#ifndef _XLIB_H
# ifdef MAC_TCL
# include <Xlib.h>
# include <X.h>
# else
# if _PACKAGE_ast
# include <Xlib.h>
# else
# endif
# endif
#endif
#ifdef __STDC__
# include <stddef.h>
#endif
/*
* Decide whether or not to use input methods.
*/
#ifdef XNQueryInputStyle
#define TK_USE_INPUT_METHODS
#endif
/*
* Dummy types that are used by clients:
*/
typedef struct Tk_BindingTable_ *Tk_BindingTable;
typedef struct Tk_Canvas_ *Tk_Canvas;
typedef struct Tk_Cursor_ *Tk_Cursor;
typedef struct Tk_ErrorHandler_ *Tk_ErrorHandler;
typedef struct Tk_Image__ *Tk_Image;
typedef struct Tk_ImageMaster_ *Tk_ImageMaster;
typedef struct Tk_Window_ *Tk_Window;
typedef struct Tk_3DBorder_ *Tk_3DBorder;
/*
* Additional types exported to clients.
*/
typedef char *Tk_Uid;
/*
* Structure used to specify how to handle argv options.
*/
typedef struct {
char *key; /* The key string that flags the option in the
* argv array. */
int type; /* Indicates option type; see below. */
char *src; /* Value to be used in setting dst; usage
* depends on type. */
char *dst; /* Address of value to be modified; usage
* depends on type. */
char *help; /* Documentation message describing this option. */
} Tk_ArgvInfo;
/*
* Legal values for the type field of a Tk_ArgvInfo: see the user
* documentation for details.
*/
#define TK_ARGV_CONSTANT 15
#define TK_ARGV_INT 16
#define TK_ARGV_STRING 17
#define TK_ARGV_UID 18
#define TK_ARGV_REST 19
#define TK_ARGV_FLOAT 20
#define TK_ARGV_FUNC 21
#define TK_ARGV_GENFUNC 22
#define TK_ARGV_HELP 23
#define TK_ARGV_CONST_OPTION 24
#define TK_ARGV_OPTION_VALUE 25
#define TK_ARGV_OPTION_NAME_VALUE 26
#define TK_ARGV_END 27
/*
* Flag bits for passing to Tk_ParseArgv:
*/
#define TK_ARGV_NO_DEFAULTS 0x1
#define TK_ARGV_NO_LEFTOVERS 0x2
#define TK_ARGV_NO_ABBREV 0x4
#define TK_ARGV_DONT_SKIP_FIRST_ARG 0x8
/*
* Structure used to describe application-specific configuration
* options: indicates procedures to call to parse an option and
* to return a text string describing an option.
*/
int offset));
Tcl_FreeProc **freeProcPtr));
typedef struct Tk_CustomOption {
* option and store it in converted
* form. */
* string describing an existing
* option. */
* option parser: passed to
* parseProc and printProc. */
/*
* Structure used to specify information for Tk_ConfigureWidget. Each
* structure gives complete information for one option, including
* how the option is specified on the command line, where it appears
* in the option database, etc.
*/
typedef struct Tk_ConfigSpec {
int type; /* Type of option, such as TK_CONFIG_COLOR;
* see definitions below. Last option in
* table must have type TK_CONFIG_END. */
char *argvName; /* Switch used to specify option in argv.
* NULL means this spec is part of a group. */
char *dbName; /* Name for option in option database. */
char *dbClass; /* Class for option in database. */
char *defValue; /* Default value for option if not
* specified in command line or database. */
int offset; /* Where in widget record to store value;
* use Tk_Offset macro to generate values
* for this. */
int specFlags; /* Any combination of the values defined
* below; other bits are used internally
* by tkConfig.c. */
* a pointer to info about how to parse and
* print the option. Otherwise it is
* irrelevant. */
/*
* Type values for Tk_ConfigSpec structures. See the user
* documentation for details.
*/
#define TK_CONFIG_BOOLEAN 1
#define TK_CONFIG_INT 2
#define TK_CONFIG_DOUBLE 3
#define TK_CONFIG_STRING 4
#define TK_CONFIG_UID 5
#define TK_CONFIG_COLOR 6
#define TK_CONFIG_FONT 7
#define TK_CONFIG_BITMAP 8
#define TK_CONFIG_BORDER 9
#define TK_CONFIG_RELIEF 10
#define TK_CONFIG_CURSOR 11
#define TK_CONFIG_ACTIVE_CURSOR 12
#define TK_CONFIG_JUSTIFY 13
#define TK_CONFIG_ANCHOR 14
#define TK_CONFIG_SYNONYM 15
#define TK_CONFIG_CAP_STYLE 16
#define TK_CONFIG_JOIN_STYLE 17
#define TK_CONFIG_PIXELS 18
#define TK_CONFIG_MM 19
#define TK_CONFIG_WINDOW 20
#define TK_CONFIG_CUSTOM 21
#define TK_CONFIG_END 22
/*
* Macro to use to fill in "offset" fields of Tk_ConfigInfos.
* Computes number of bytes from beginning of structure to a
* given field.
*/
#ifdef offsetof
#else
#endif
/*
* Possible values for flags argument to Tk_ConfigureWidget:
*/
#define TK_CONFIG_ARGV_ONLY 1
/*
* Possible flag values for Tk_ConfigInfo structures. Any bits at
* or above TK_CONFIG_USER_BIT may be used by clients for selecting
* certain entries. Before changing any values here, coordinate with
* tkConfig.c (internal-use-only flags are defined there).
*/
#define TK_CONFIG_COLOR_ONLY 1
#define TK_CONFIG_MONO_ONLY 2
#define TK_CONFIG_NULL_OK 4
#define TK_CONFIG_DONT_SET_DEFAULT 8
#define TK_CONFIG_OPTION_SPECIFIED 0x10
#define TK_CONFIG_USER_BIT 0x100
/*
* Enumerated type for describing actions to be taken in response
* to a restrictProc established by Tk_RestrictEvents.
*/
typedef enum {
/*
* Priority levels to pass to Tk_AddOption:
*/
#define TK_WIDGET_DEFAULT_PRIO 20
#define TK_STARTUP_FILE_PRIO 40
#define TK_USER_DEFAULT_PRIO 60
#define TK_INTERACTIVE_PRIO 80
#define TK_MAX_PRIO 100
/*
* Relief values returned by Tk_GetRelief:
*/
#define TK_RELIEF_RAISED 1
#define TK_RELIEF_FLAT 2
#define TK_RELIEF_SUNKEN 4
#define TK_RELIEF_GROOVE 8
#define TK_RELIEF_RIDGE 16
/*
* "Which" argument values for Tk_3DBorderGC:
*/
#define TK_3D_FLAT_GC 1
#define TK_3D_LIGHT_GC 2
#define TK_3D_DARK_GC 3
/*
* Special EnterNotify/LeaveNotify "mode" for use in events
* generated by tkShare.c. Pick a high enough value that it's
* unlikely to conflict with existing values (like NotifyNormal)
* or any new values defined in the future.
*/
#define TK_NOTIFY_SHARE 20
/*
* Enumerated type for describing a point by which to anchor something:
*/
typedef enum {
} Tk_Anchor;
/*
* Enumerated type for describing a style of justification:
*/
typedef enum {
} Tk_Justify;
/*
* Each geometry manager (the packer, the placer, etc.) is represented
* by a structure of the following form, which indicates procedures
* to invoke in the geometry manager to carry out certain functions.
*/
typedef struct Tk_GeomMgr {
char *name; /* Name of the geometry manager (command
* used to invoke it, or name of widget
* class that allows embedded widgets). */
/* Procedure to invoke when a slave's
* requested geometry changes. */
/* Procedure to invoke when a slave is
* taken away from one geometry manager
* by another. NULL means geometry manager
* doesn't care when slaves are lost. */
} Tk_GeomMgr;
/*
* Result values returned by Tk_GetScrollInfo:
*/
#define TK_SCROLL_MOVETO 1
#define TK_SCROLL_PAGES 2
#define TK_SCROLL_UNITS 3
#define TK_SCROLL_ERROR 4
/*---------------------------------------------------------------------------
*
* Extensions to the X event set
*
*---------------------------------------------------------------------------
*/
#define VirtualEvent (LASTEvent)
/*
* A virtual event shares most of its fields with the XKeyEvent and
* XButtonEvent structures. 99% of the time a virtual event will be
* an abstraction of a key or button event, so this structure provides
* the most information to the user. The only difference is the changing
* of the detail field for a virtual event so that it holds the name of the
* virtual event being triggered.
*/
typedef struct {
int type;
unsigned long serial; /* # of last request processed by server */
int x, y; /* pointer x, y coordinates in event window */
unsigned int state; /* key or button mask */
typedef struct {
int type;
unsigned long serial; /* # of last request processed by server */
typedef XActivateDeactivateEvent XActivateEvent;
typedef XActivateDeactivateEvent XDeactivateEvent;
/*
*--------------------------------------------------------------
*
* Macros for querying Tk_Window structures. See the
* manual entries for documentation.
*
*--------------------------------------------------------------
*/
#define Tk_IsMapped(tkwin) \
#define Tk_IsTopLevel(tkwin) \
#define Tk_InternalBorderWidth(tkwin) \
/*
* The structure below is needed by the macros above so that they can
* access the fields of a Tk_Window. The fields not needed by the macros
* are declared as "dummyX". The structure has its own type in order to
* prevent applications from accessing Tk_Window fields except using
* official macros. WARNING!! The structure definition must be kept
* consistent with the TkWindow structure in tkInt.h. If you change one,
* then change the other. See the declaration in tkInt.h for
* documentation on what the fields are used for internally.
*/
typedef struct Tk_FakeWin {
char *dummy1;
int screenNum;
int depth;
char *dummy2;
char *dummy3;
char *dummy4;
char *dummy5;
char *pathName;
unsigned int dummy6;
unsigned long dummy7;
unsigned int flags;
char *dummy8;
#ifdef TK_USE_INPUT_METHODS
#endif /* TK_USE_INPUT_METHODS */
int dummy11;
int dummy12;
char *dummy13;
char *dummy14;
int internalBorderWidth;
char *dummy16;
char *dummy17;
} Tk_FakeWin;
/*
* Flag values for TkWindow (and Tk_FakeWin) structures are:
*
* TK_MAPPED: 1 means window is currently mapped,
* 0 means unmapped.
* TK_TOP_LEVEL: 1 means this is a top-level window (it
* was or will be created as a child of
* a root window).
* TK_ALREADY_DEAD: 1 means the window is in the process of
* being destroyed already.
* TK_NEED_CONFIG_NOTIFY: 1 means that the window has been reconfigured
* before it was made to exist. At the time of
* making it exist a ConfigureNotify event needs
* to be generated.
* TK_GRAB_FLAG: Used to manage grabs. See tkGrab.c for
* details.
* TK_CHECKED_IC: 1 means we've already tried to get an input
* context for this window; if the ic field
* is NULL it means that there isn't a context
* for the field.
* TK_PARENT_DESTROYED: 1 means that the window's parent has already
* been destroyed or is in the process of being
* destroyed.
* TK_WM_COLORMAP_WINDOW: 1 means that this window has at some time
* appeared in the WM_COLORMAP_WINDOWS property
* for its toplevel, so we have to remove it
* from that property if the window is
* deleted and the toplevel isn't.
*/
#define TK_MAPPED 1
#define TK_TOP_LEVEL 2
#define TK_ALREADY_DEAD 4
#define TK_NEED_CONFIG_NOTIFY 8
#define TK_GRAB_FLAG 0x10
#define TK_CHECKED_IC 0x20
#define TK_PARENT_DESTROYED 0x40
#define TK_WM_COLORMAP_WINDOW 0x80
/*
*--------------------------------------------------------------
*
* Procedure prototypes and structures used for defining new canvas
* items:
*
*--------------------------------------------------------------
*/
/*
* For each item in a canvas widget there exists one record with
* the following structure. Each actual item is represented by
* a record with the following stuff at its beginning, plus additional
* type-specific stuff after that.
*/
#define TK_TAG_SPACE 3
typedef struct Tk_Item {
int id; /* Unique identifier for this item
* (also serves as first tag for
* item). */
* items in this canvas. Later items
* in list are drawn on top of earlier
* ones. */
* tags. */
* points to staticTagSpace, but
* may point to malloc-ed space if
* there are lots of tags. */
int tagSpace; /* Total amount of tag space available
* at tagPtr. */
int numTags; /* Number of tag slots actually used
* at *tagPtr. */
* this type of item. */
* canvas units. Set by item-specific
* code and guaranteed to contain every
* pixel drawn in item. Item area
* includes x1 and y1 but not x2
* and y2. */
/*
*------------------------------------------------------------------
* Starting here is additional type-specific stuff; see the
* declarations for individual types to see what is part of
* each type. The actual space below is determined by the
* "itemInfoSize" of the type's Tk_ItemType record.
*------------------------------------------------------------------
*/
} Tk_Item;
/*
* Records of the following type are used to describe a type of
* item (e.g. lines, circles, etc.) that can form part of a
* canvas widget.
*/
char **argv));
char **argv));
int *indexPtr));
int maxBytes));
typedef struct Tk_ItemType {
char *name; /* The name of this type of item, such
* as "line". */
int itemSize; /* Total amount of space needed for
* item's record. */
* this type. */
* specs for this type. Used for
* returning configuration info. */
* configuration options. */
* the item's coordinates. */
* this type. */
* this type. */
int alwaysRedraw; /* Non-zero means displayProc should
* be called even when the item has
* been moved off-screen. */
* a given point. */
* outside, or overlapping an area. */
/* Procedure to write a Postscript
* description for items of this
* type. */
* this type. */
* this type. */
* indicated character. NULL if
* item doesn't support indexing. */
* to just before a given position. */
* STRING format) when it is in this
* item. */
* an item. */
* from an item. */
* a list. */
} Tk_ItemType;
/*
* The following structure provides information about the selection and
* the insertion cursor. It is needed by only a few items, such as
* those that display text. It is shared by the generic canvas code
* and the item-specific code, but most of the fields should be written
* only by the canvas generic code.
*/
typedef struct Tk_CanvasTextInfo {
* characters. Read-only to items.*/
int selBorderWidth; /* Width of border around selection.
* Read-only to items. */
* Read-only to items. */
* selection isn't in this canvas.
* Writable by items. */
int selectFirst; /* Index of first selected character.
* Writable by items. */
int selectLast; /* Index of last selected character.
* Writable by items. */
* not necessarily selItemPtr. Read-only
* to items. */
int selectAnchor; /* Fixed end of selection (i.e. "select to"
* operation will use this as one end of the
* selection). Writable by items. */
* cursor. Read-only to items. */
int insertWidth; /* Total width of insertion cursor. Read-only
* to items. */
int insertBorderWidth; /* Width of 3-D border around insert cursor.
* Read-only to items. */
* or NULL if no such item. Read-only to
* items. */
int gotFocus; /* Non-zero means that the canvas widget has
* the input focus. Read-only to items.*/
int cursorOn; /* Non-zero means that an insertion cursor
* should be displayed in focusItemPtr.
* Read-only to items.*/
/*
*--------------------------------------------------------------
*
* Procedure prototypes and structures used for managing images:
*
*--------------------------------------------------------------
*/
typedef struct Tk_ImageType Tk_ImageType;
int imageHeight));
/*
* The following structure represents a particular type of image
* (bitmap, xpm image, etc.). It provides information common to
* all images of that type, such as the type name and a collection
* of procedures in the image manager that respond to various
* events. Each image manager is represented by one of these
* structures.
*/
struct Tk_ImageType {
char *name; /* Name of image type. */
/* Procedure to call to create a new image
* of this type. */
* Tk_GetImage is called in a new way
* (new visual or screen). */
/* Call to draw image, in response to
* Tk_RedrawImage calls. */
* is called to release an instance of an
* image. */
/* Procedure to call to delete image. It
* will not be called until after freeProc
* has been called for each instance of the
* image. */
struct Tk_ImageType *nextPtr;
/* Next in list of all image types currently
* known. Filled in by Tk, not by image
* manager. */
};
/*
*--------------------------------------------------------------
*
* Additional definitions used to manage images of type "photo".
*
*--------------------------------------------------------------
*/
/*
* The following type is used to identify a particular photo image
* to be manipulated:
*/
typedef void *Tk_PhotoHandle;
/*
* The following structure describes a block of pixels in memory:
*/
typedef struct Tk_PhotoImageBlock {
unsigned char *pixelPtr; /* Pointer to the first pixel. */
int width; /* Width of block, in pixels. */
int height; /* Height of block, in pixels. */
int pitch; /* Address difference between corresponding
* pixels in successive lines. */
int pixelSize; /* Address difference between successive
* pixels in the same line. */
* and blue components of the pixel and the
* pixel as a whole. */
/*
* Procedure prototypes and structures used in reading and
* writing photo images:
*/
typedef struct Tk_PhotoImageFormat Tk_PhotoImageFormat;
/*
* The following structure represents a particular file format for
* storing images (e.g., PPM, GIF, JPEG, etc.). It provides information
* to allow image files of that format to be recognized and read into
* a photo image.
*/
struct Tk_PhotoImageFormat {
char *name; /* Name of image file format */
/* Procedure to call to determine whether
* an image file matches this format. */
/* Procedure to call to determine whether
* the data in a string matches this format. */
/* Procedure to call to read data from
* an image file into a photo image. */
/* Procedure to call to read data from
* a string into a photo image. */
/* Procedure to call to write data from
* a photo image to a file. */
/* Procedure to call to obtain a string
* representation of the data in a photo
* image.*/
struct Tk_PhotoImageFormat *nextPtr;
/* Next in list of all photo image formats
* currently known. Filled in by Tk, not
* by image format handler. */
};
/*
*--------------------------------------------------------------
*
* The definitions below provide backward compatibility for
* functions and types related to event handling that used to
* be in Tk but have moved to Tcl.
*
*--------------------------------------------------------------
*/
#define TK_READABLE TCL_READABLE
#define TK_WRITABLE TCL_WRITABLE
#define TK_EXCEPTION TCL_EXCEPTION
#define TK_DONT_WAIT TCL_DONT_WAIT
#define TK_X_EVENTS TCL_WINDOW_EVENTS
#define TK_WINDOW_EVENTS TCL_WINDOW_EVENTS
#define TK_FILE_EVENTS TCL_FILE_EVENTS
#define TK_TIMER_EVENTS TCL_TIMER_EVENTS
#define TK_IDLE_EVENTS TCL_IDLE_EVENTS
#define TK_ALL_EVENTS TCL_ALL_EVENTS
#define Tk_IdleProc Tcl_IdleProc
#define Tk_FileProc Tcl_FileProc
#define Tk_TimerProc Tcl_TimerProc
#define Tk_TimerToken Tcl_TimerToken
#define Tk_CancelIdleCall Tcl_CancelIdleCall
#define Tk_DeleteFileHandler(file) \
#define Tk_DoOneEvent Tcl_DoOneEvent
#define Tk_DoWhenIdle Tcl_DoWhenIdle
/* Additional stuff that has moved to Tcl: */
#define Tk_AfterCmd Tcl_AfterCmd
#define Tk_EventuallyFree Tcl_EventuallyFree
#define Tk_FreeProc Tcl_FreeProc
#define Tk_Preserve Tcl_Preserve
#define Tk_Release Tcl_Release
/*
*--------------------------------------------------------------
*
* Additional procedure types defined by Tk.
*
*--------------------------------------------------------------
*/
/*
*--------------------------------------------------------------
*
* Exported procedures and variables.
*
*--------------------------------------------------------------
*/
#if _BLD_tk && defined(__EXPORT__)
#define extern __EXPORT__
#endif
int relief));
ClientData *objectPtr));
double x, double y, short *drawableXPtr,
short *drawableYPtr));
int y2));
double *doublePtr));
int offset));
Tcl_FreeProc **freeProcPtr));
double x, double y, short *screenXPtr,
short *screenYPtr));
unsigned long valueMask,
char* buffer));
int flags));
Tk_ImageType *typePtr));
char *pathName, char *screenName));
int height));
char *eventString));
char *name));
int leftRelief));
int relief));
int leftRelief));
int relief));
char *eventString));
char *className));
int *intPtr));
Colormap *colormapPtr));
int *heightPtr));
Tk_ImageMaster master, int x, int y,
int imageHeight));
char *name));
int height));
int y));
int x, int y));
Tk_PhotoImageBlock *blockPtr, int x, int y,
Tk_PhotoImageBlock *blockPtr, int x, int y,
int subsampleX, int subsampleY));
char *name));
char *className));
int gridHeight));
int width));
unsigned long pixel));
unsigned long pixel));
int width));
int *heightPtr));
/*
* Tcl commands exported by Tk:
*/
#undef extern
#endif /* RESOURCE_INCLUDED */
#endif /* _TK */