Annotation of micropolis/src/tk/tkcanvas.h, revision 1.1

1.1     ! root        1: /*
        !             2:  * tkCanvas.h --
        !             3:  *
        !             4:  *     Declarations shared among all the files that implement
        !             5:  *     canvas widgets.
        !             6:  *
        !             7:  * Copyright 1991-1992 Regents of the University of California.
        !             8:  * Permission to use, copy, modify, and distribute this
        !             9:  * software and its documentation for any purpose and without
        !            10:  * fee is hereby granted, provided that the above copyright
        !            11:  * notice appear in all copies.  The University of California
        !            12:  * makes no representations about the suitability of this
        !            13:  * software for any purpose.  It is provided "as is" without
        !            14:  * express or implied warranty.
        !            15:  *
        !            16:  * $Header: /user6/ouster/wish/RCS/tkCanvas.h,v 1.14 92/08/19 08:34:16 ouster Exp $ SPRITE (Berkeley)
        !            17:  */
        !            18: 
        !            19: #ifndef _TKCANVAS
        !            20: #define _TKCANVAS
        !            21: 
        !            22: #ifndef _TK
        !            23: #include "tk.h"
        !            24: #endif
        !            25: 
        !            26: /*
        !            27:  * For each item in a canvas widget there exists one record with
        !            28:  * the following structure.  Each actual item is represented by
        !            29:  * a record with the following stuff at its beginning, plus additional
        !            30:  * type-specific stuff after that.
        !            31:  */
        !            32: 
        !            33: #define TK_TAG_SPACE 3
        !            34: 
        !            35: typedef struct Tk_Item  {
        !            36:     int id;                            /* Unique identifier for this item
        !            37:                                         * (also serves as first tag for
        !            38:                                         * item). */
        !            39:     struct Tk_Item *nextPtr;           /* Next in display list of all
        !            40:                                         * items in this canvas.  Later items
        !            41:                                         * in list are drawn on top of earlier
        !            42:                                         * ones. */
        !            43:     Tk_Uid staticTagSpace[TK_TAG_SPACE];/* Built-in space for limited # of
        !            44:                                         * tags. */
        !            45:     Tk_Uid *tagPtr;                    /* Pointer to array of tags.  Usually
        !            46:                                         * points to staticTagSpace, but
        !            47:                                         * may point to malloc-ed space if
        !            48:                                         * there are lots of tags. */
        !            49:     int tagSpace;                      /* Total amount of tag space available
        !            50:                                         * at tagPtr. */
        !            51:     int numTags;                       /* Number of tag slots actually used
        !            52:                                         * at *tagPtr. */
        !            53:     struct Tk_ItemType *typePtr;       /* Table of procedures that implement
        !            54:                                         * this type of item. */
        !            55:     int x1, y1, x2, y2;                        /* Bounding box for item, in integer
        !            56:                                         * canvas units. Set by item-specific
        !            57:                                         * code and guaranteed to contain every
        !            58:                                         * pixel drawn in item.  Item area
        !            59:                                         * includes x1 and y1 but not x2
        !            60:                                         * and y2. */
        !            61: 
        !            62:     /*
        !            63:      *------------------------------------------------------------------
        !            64:      * Starting here is additional type-specific stuff;  see the
        !            65:      * declarations for individual types to see what is part of
        !            66:      * each type.  The actual space below is determined by the
        !            67:      * "itemInfoSize" of the type's Tk_ItemType record.
        !            68:      *------------------------------------------------------------------
        !            69:      */
        !            70: } Tk_Item;
        !            71: 
        !            72: /*
        !            73:  * The record below describes a canvas widget.  It is made available
        !            74:  * to the item procedures so they can access certain shared fields such
        !            75:  * as the overall displacement and scale factor for the canvas.
        !            76:  */
        !            77: 
        !            78: typedef struct {
        !            79:     Tk_Window tkwin;           /* Window that embodies the canvas.  NULL
        !            80:                                 * means that the window has been destroyed
        !            81:                                 * but the data structures haven't yet been
        !            82:                                 * cleaned up.*/
        !            83:     Tcl_Interp *interp;                /* Interpreter associated with canvas. */
        !            84:     Tk_Item *firstItemPtr;     /* First in list of all items in canvas,
        !            85:                                 * or NULL if canvas empty. */
        !            86:     Tk_Item *lastItemPtr;      /* Last in list of all items in canvas,
        !            87:                                 * or NULL if canvas empty. */
        !            88: 
        !            89:     /*
        !            90:      * Information used when displaying widget:
        !            91:      */
        !            92: 
        !            93:     int borderWidth;           /* Width of 3-D border around window. */
        !            94:     Tk_3DBorder bgBorder;      /* Used for canvas background. */
        !            95:     XColor *bgColor;           /* Color used for clearing to background. */
        !            96:     int relief;                        /* Indicates whether window as a whole is
        !            97:                                 * raised, sunken, or flat. */
        !            98:     GC pixmapGC;               /* Used to copy bits from a pixmap to the
        !            99:                                 * screen and also to clear the pixmap. */
        !           100:     int width, height;         /* Dimensions to request for canvas window,
        !           101:                                 * specified in pixels. */
        !           102:     int redrawX1, redrawY1;    /* Upper left corner of area to redraw,
        !           103:                                 * in pixel coordinates.  Border pixels
        !           104:                                 * are included.  Only valid if
        !           105:                                 * REDRAW_PENDING flag is set. */
        !           106:     int redrawX2, redrawY2;    /* Lower right corner of area to redraw,
        !           107:                                 * in pixel coordinates.  Border pixels
        !           108:                                 * will *not* be redrawn. */
        !           109:     int confine;               /* Non-zero means constrain view to keep
        !           110:                                 * as much of canvas visible as possible. */
        !           111: 
        !           112:     /*
        !           113:      * Information used to manage and display selection:
        !           114:      */
        !           115: 
        !           116:     Tk_3DBorder selBorder;     /* Border and background for selected
        !           117:                                 * characters. */
        !           118:     int selBorderWidth;                /* Width of border around selection. */
        !           119:     XColor *selFgColorPtr;     /* Foreground color for selected text. */
        !           120:     Tk_Item *selItemPtr;       /* Pointer to selected item.  NULL means
        !           121:                                 * selection isn't in this canvas. */
        !           122:     int selectFirst;           /* Index of first selected character. */
        !           123:     int selectLast;            /* Index of last selected character. */
        !           124:     Tk_Item *anchorItemPtr;    /* Item corresponding to "selectAnchor":
        !           125:                                 * not necessarily selItemPtr. */
        !           126:     int selectAnchor;          /* Fixed end of selection (i.e. "select to"
        !           127:                                 * operation will use this as one end of the
        !           128:                                 * selection). */
        !           129: 
        !           130:     /*
        !           131:      * Information for display insertion cursor in text:
        !           132:      */
        !           133: 
        !           134:     Tk_3DBorder cursorBorder;  /* Used to draw vertical bar for insertion
        !           135:                                 * cursor. */
        !           136:     int cursorWidth;           /* Total width of insertion cursor. */
        !           137:     int cursorBorderWidth;     /* Width of 3-D border around insert cursor. */
        !           138:     int cursorOnTime;          /* Number of milliseconds cursor should spend
        !           139:                                 * in "on" state for each blink. */
        !           140:     int cursorOffTime;         /* Number of milliseconds cursor should spend
        !           141:                                 * in "off" state for each blink. */
        !           142:     Tk_TimerToken cursorBlinkHandler;
        !           143:                                /* Timer handler used to blink cursor on and
        !           144:                                 * off. */
        !           145:     Tk_Item *focusItemPtr;     /* Item that currently has the input focus,
        !           146:                                 * or NULL if no such item. */
        !           147: 
        !           148:     /*
        !           149:      * Transformation applied to canvas as a whole:  to compute screen
        !           150:      * coordinates (X,Y) from canvas coordinates (x,y), do the following:
        !           151:      *
        !           152:      * X = x - xOrigin;
        !           153:      * Y = y - yOrigin;
        !           154:      */
        !           155: 
        !           156:     int xOrigin, yOrigin;      /* Canvas coordinates corresponding to
        !           157:                                 * upper-left corner of window, given in
        !           158:                                 * canvas pixel units. */
        !           159:     int drawableXOrigin, drawableYOrigin;
        !           160:                                /* During redisplay, these fields give the
        !           161:                                 * canvas coordinates corresponding to
        !           162:                                 * the upper-left corner of the drawable
        !           163:                                 * where items are actually being drawn
        !           164:                                 * (typically a pixmap smaller than the
        !           165:                                 * whole window). */
        !           166: 
        !           167:     /*
        !           168:      * Information used for event bindings associated with items.
        !           169:      */
        !           170: 
        !           171:     Tk_BindingTable bindingTable;
        !           172:                                /* Table of all bindings currently defined
        !           173:                                 * for this canvas.  NULL means that no
        !           174:                                 * bindings exist, so the table hasn't been
        !           175:                                 * created.  Each "object" used for this
        !           176:                                 * table is either a Tk_Uid for a tag or
        !           177:                                 * the address of an item named by id. */
        !           178:     Tk_Item *currentItemPtr;   /* The item currently containing the mouse
        !           179:                                 * pointer, or NULL if none. */
        !           180:     double closeEnough;                /* The mouse is assumed to be inside an
        !           181:                                 * item if it is this close to it. */
        !           182:     XEvent pickEvent;          /* The event upon which the current choice
        !           183:                                 * of currentItem is based.  Must be saved
        !           184:                                 * so that if the currentItem is deleted,
        !           185:                                 * can pick another. */
        !           186: 
        !           187:     /*
        !           188:      * Information used for managing scrollbars:
        !           189:      */
        !           190: 
        !           191:     char *xScrollCmd;          /* Command prefix for communicating with
        !           192:                                 * horizontal scrollbar.  NULL means no
        !           193:                                 * horizontal scrollbar.  Malloc'ed*/
        !           194:     char *yScrollCmd;          /* Command prefix for communicating with
        !           195:                                 * vertical scrollbar.  NULL means no
        !           196:                                 * vertical scrollbar.  Malloc'ed*/
        !           197:     int scrollX1, scrollY1, scrollX2, scrollY2;
        !           198:                                /* These four coordinates define the region
        !           199:                                 * that is the 100% area for scrolling (i.e.
        !           200:                                 * these numbers determine the size and
        !           201:                                 * location of the sliders on scrollbars).
        !           202:                                 * Units are pixels in canvas coords. */
        !           203:     char *regionString;                /* The option string from which scrollX1
        !           204:                                 * etc. are derived.  Malloc'ed. */
        !           205:     int scrollIncrement;       /* The number of canvas units that the
        !           206:                                 * picture shifts when a scrollbar up or
        !           207:                                 * down arrow is pressed. */
        !           208: 
        !           209:     /*
        !           210:      * Information used for scanning:
        !           211:      */
        !           212: 
        !           213:     int scanX;                 /* X-position at which scan started (e.g.
        !           214:                                 * button was pressed here). */
        !           215:     int scanXOrigin;           /* Value of xOrigin field when scan started. */
        !           216:     int scanY;                 /* Y-position at which scan started (e.g.
        !           217:                                 * button was pressed here). */
        !           218:     int scanYOrigin;           /* Value of yOrigin field when scan started. */
        !           219: 
        !           220:     /*
        !           221:      * Information used to speed up searches by remembering the last item
        !           222:      * created or found with an item id search.
        !           223:      */
        !           224: 
        !           225:     Tk_Item *hotPtr;           /* Pointer to "hot" item (one that's been
        !           226:                                 * recently used.  NULL means there's no
        !           227:                                 * hot item. */
        !           228:     Tk_Item *hotPrevPtr;       /* Pointer to predecessor to hotPtr (NULL
        !           229:                                 * means item is first in list).  This is
        !           230:                                 * only a hint and may not really be hotPtr's
        !           231:                                 * predecessor. */
        !           232: 
        !           233:     /*
        !           234:      * Miscellaneous information:
        !           235:      */
        !           236: 
        !           237:     Cursor cursor;             /* Current cursor for window, or None. */
        !           238:     double pixelsPerMM;                /* Scale factor between MM and pixels;
        !           239:                                 * used when converting coordinates. */
        !           240:     int flags;                 /* Various flags;  see below for
        !           241:                                 * definitions. */
        !           242:     int nextId;                        /* Number to use as id for next item
        !           243:                                 * created in widget. */
        !           244:     Tk_TimerToken updateTimerToken; /* Added by Don to optimize rapid 
        !           245:                                     * updates. */
        !           246: } Tk_Canvas;
        !           247: 
        !           248: /*
        !           249:  * Flag bits for canvases:
        !           250:  *
        !           251:  * REDRAW_PENDING -            1 means a DoWhenIdle handler has already
        !           252:  *                             been created to redraw some or all of the
        !           253:  *                             canvas.
        !           254:  * REPICK_NEEDED -             1 means DisplayCanvas should pick a new
        !           255:  *                             current item before redrawing the canvas.
        !           256:  * GOT_FOCUS -                 1 means the focus is currently in this
        !           257:  *                             widget, so should draw the insertion cursor.
        !           258:  * CURSOR_ON -                 1 means the insertion cursor is in the "on"
        !           259:  *                             phase of its blink cycle.  0 means either
        !           260:  *                             we don't have the focus or the cursor is in
        !           261:  *                             the "off" phase of its cycle.
        !           262:  * BUTTON_DOWN -               1 means that a button is currently down;
        !           263:  *                             this is used to implement grabs for the
        !           264:  *                             duration of button presses.
        !           265:  * UPDATE_SCROLLBARS -         1 means the scrollbars should get updated
        !           266:  *                             as part of the next display operation.
        !           267:  */
        !           268: 
        !           269: #define REDRAW_PENDING         1
        !           270: #define REPICK_NEEDED          2
        !           271: #define GOT_FOCUS              4
        !           272: #define CURSOR_ON              8
        !           273: #define BUTTON_DOWN            0x10
        !           274: #define UPDATE_SCROLLBARS      0x20
        !           275: 
        !           276: /*
        !           277:  * Records of the following type are used to describe a type of
        !           278:  * item (e.g.  lines, circles, etc.) that can form part of a
        !           279:  * canvas widget.
        !           280:  */
        !           281: 
        !           282: typedef int    Tk_ItemCreateProc _ANSI_ARGS_((Tk_Canvas *canvasPtr,
        !           283:                    Tk_Item *itemPtr, int argc, char **argv));
        !           284: typedef int    Tk_ItemConfigureProc _ANSI_ARGS_((Tk_Canvas *canvasPtr,
        !           285:                    Tk_Item *itemPtr, int argc, char **argv, int flags));
        !           286: typedef int    Tk_ItemCoordProc _ANSI_ARGS_((Tk_Canvas *canvasPtr,
        !           287:                    Tk_Item *itemPtr, int argc, char **argv));
        !           288: typedef void   Tk_ItemDeleteProc _ANSI_ARGS_((Tk_Item *itemPtr));
        !           289: typedef void   Tk_ItemDisplayProc _ANSI_ARGS_((Tk_Canvas *canvasPtr,
        !           290:                    Tk_Item *itemPtr, Drawable dst));
        !           291: typedef double Tk_ItemPointProc _ANSI_ARGS_((Tk_Canvas *canvasPtr,
        !           292:                    Tk_Item *itemPtr, double *pointPtr));
        !           293: typedef int    Tk_ItemAreaProc _ANSI_ARGS_((Tk_Canvas *canvasPtr,
        !           294:                    Tk_Item *itemPtr, double *rectPtr));
        !           295: typedef void   Tk_ItemPostscriptProc _ANSI_ARGS_((Tk_Canvas *canvasPtr,
        !           296:                    Tk_Item *itemPtr));
        !           297: typedef void   Tk_ItemScaleProc _ANSI_ARGS_((Tk_Canvas *canvasPtr,
        !           298:                    Tk_Item *itemPtr, double originX, double originY,
        !           299:                    double scaleX, double scaleY));
        !           300: typedef void   Tk_ItemTranslateProc _ANSI_ARGS_((Tk_Canvas *canvasPtr,
        !           301:                    Tk_Item *itemPtr, double deltaX, double deltaY));
        !           302: typedef int    Tk_ItemIndexProc _ANSI_ARGS_((Tk_Canvas *canvasPtr,
        !           303:                    Tk_Item *itemPtr, char *indexString,
        !           304:                    int *indexPtr));
        !           305: typedef void   Tk_ItemCursorProc _ANSI_ARGS_((Tk_Canvas *canvasPtr,
        !           306:                    Tk_Item *itemPtr, int index));
        !           307: typedef int    Tk_ItemSelectionProc _ANSI_ARGS_((Tk_Canvas *canvasPtr,
        !           308:                    Tk_Item *itemPtr, int offset, char *buffer,
        !           309:                    int maxBytes));
        !           310: typedef int    Tk_ItemInsertProc _ANSI_ARGS_((Tk_Canvas *canvasPtr,
        !           311:                    Tk_Item *itemPtr, int beforeThis, char *string));
        !           312: typedef int    Tk_ItemDCharsProc _ANSI_ARGS_((Tk_Canvas *canvasPtr,
        !           313:                    Tk_Item *itemPtr, int first, int last));
        !           314: 
        !           315: typedef struct Tk_ItemType {
        !           316:     char *name;                                /* The name of this type of item, such
        !           317:                                         * as "line". */
        !           318:     int itemSize;                      /* Total amount of space needed for
        !           319:                                         * item's record. */
        !           320:     Tk_ItemCreateProc *createProc;     /* Procedure to create a new item of
        !           321:                                         * this type. */
        !           322:     Tk_ConfigSpec *configSpecs;                /* Pointer to array of configuration
        !           323:                                         * specs for this type.  Used for
        !           324:                                         * returning configuration info. */
        !           325:     Tk_ItemConfigureProc *configProc;  /* Procedure to call to change
        !           326:                                         * configuration options. */
        !           327:     Tk_ItemCoordProc *coordProc;       /* Procedure to call to get and set
        !           328:                                         * the item's coordinates. */
        !           329:     Tk_ItemDeleteProc *deleteProc;     /* Procedure to delete existing item of
        !           330:                                         * this type. */
        !           331:     Tk_ItemDisplayProc *displayProc;   /* Procedure to display items of
        !           332:                                         * this type. */
        !           333:     int alwaysRedraw;                  /* Non-zero means displayProc should
        !           334:                                         * be called even when the item has
        !           335:                                         * been moved off-screen. */
        !           336:     Tk_ItemPointProc *pointProc;       /* Computes distance from item to
        !           337:                                         * a given point. */
        !           338:     Tk_ItemAreaProc *areaProc;         /* Computes whether item is inside,
        !           339:                                         * outside, or overlapping an area. */
        !           340:     Tk_ItemPostscriptProc *postscriptProc;
        !           341:                                        /* Procedure to write a Postscript
        !           342:                                         * description for items of this
        !           343:                                         * type. */
        !           344:     Tk_ItemScaleProc *scaleProc;       /* Procedure to rescale items of
        !           345:                                         * this type. */
        !           346:     Tk_ItemTranslateProc *translateProc;/* Procedure to translate items of
        !           347:                                         * this type. */
        !           348:     Tk_ItemIndexProc *indexProc;       /* Procedure to determine index of
        !           349:                                         * indicated character.  NULL if
        !           350:                                         * item doesn't support indexing. */
        !           351:     Tk_ItemCursorProc *cursorProc;     /* Procedure to set cursor position
        !           352:                                         * to just before a given position. */
        !           353:     Tk_ItemSelectionProc *selectionProc;/* Procedure to return selection (in
        !           354:                                         * STRING format) when it is in this
        !           355:                                         * item. */
        !           356:     Tk_ItemInsertProc *insertProc;     /* Procedure to insert something into
        !           357:                                         * an item. */
        !           358:     Tk_ItemDCharsProc *dCharsProc;     /* Procedure to delete characters
        !           359:                                         * from an item. */
        !           360:     struct Tk_ItemType *nextPtr;       /* Used to link types together into
        !           361:                                         * a list. */
        !           362: } Tk_ItemType;
        !           363: 
        !           364: /*
        !           365:  * Macros to transform a point from double-precision canvas coordinates
        !           366:  * to integer pixel coordinates in the pixmap where redisplay is being
        !           367:  * done.
        !           368:  */
        !           369: 
        !           370: #define SCREEN_X(canvasPtr, x) \
        !           371:        (((int) ((x) + 0.5)) - (canvasPtr)->drawableXOrigin)
        !           372: #define SCREEN_Y(canvasPtr, y) \
        !           373:        (((int) ((y) + 0.5)) - (canvasPtr)->drawableYOrigin)
        !           374: 
        !           375: /*
        !           376:  * Canvas-related variables that are shared among Tk modules but not
        !           377:  * exported to the outside world:
        !           378:  */
        !           379: 
        !           380: extern Tk_CustomOption tkCanvasTagsOption;
        !           381: 
        !           382: /*
        !           383:  * Canvas-related procedures that are shared among Tk modules but not
        !           384:  * exported to the outside world:
        !           385:  */
        !           386: 
        !           387: extern void            TkBezierScreenPoints _ANSI_ARGS_((Tk_Canvas *canvasPtr,
        !           388:                            double control[], int numSteps,
        !           389:                            XPoint *xPointPtr));
        !           390: extern void            TkFillPolygon _ANSI_ARGS_((Tk_Canvas *canvasPtr,
        !           391:                            double *coordPtr, int numPoints, Drawable drawable,
        !           392:                            GC gc));
        !           393: extern int             TkGetCanvasCoord _ANSI_ARGS_((Tk_Canvas *canvasPtr,
        !           394:                            char *string, double *doublePtr));
        !           395: extern void            TkIncludePoint _ANSI_ARGS_((Tk_Canvas *canvasPtr,
        !           396:                            Tk_Item *itemPtr, double *pointPtr));
        !           397: extern int             TkMakeBezierCurve _ANSI_ARGS_((Tk_Canvas *canvasPtr,
        !           398:                            double *pointPtr, int numPoints, int numSteps,
        !           399:                            XPoint xPoints[], double dblPoints[]));
        !           400: 
        !           401: #endif /* _TKCANVAS */

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.