Initial commit of OpenSPARC T2 design and verification files.
[OpenSPARC-T2-DV] / tools / perl-5.8.0 / lib / site_perl / 5.8.0 / sun4-solaris / Tk / pTk / tkCanvas.h
CommitLineData
86530b38
AT
1/*
2 * tkCanvas.h --
3 *
4 * Declarations shared among all the files that implement
5 * canvas widgets.
6 *
7 * Copyright (c) 1991-1994 The Regents of the University of California.
8 * Copyright (c) 1994-1995 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: tkCanvas.h,v 1.3 1998/10/13 18:13:06 rjohnson Exp $
15 */
16
17#ifndef _TKCANVAS
18#define _TKCANVAS
19
20#ifndef _TK
21#include "tk.h"
22#endif
23
24#ifndef USE_OLD_TAG_SEARCH
25typedef struct TagSearchExpr_s TagSearchExpr;
26
27struct TagSearchExpr_s {
28 TagSearchExpr *next; /* for linked lists of expressions - used in bindings */
29 Tk_Uid uid; /* the uid of the whole expression */
30 Tk_Uid *uids; /* expresion compiled to an array of uids */
31 int allocated; /* available space for array of uids */
32 int length; /* length of expression */
33 int index; /* current position in expression evaluation */
34 int match; /* this expression matches event's item's tags*/
35};
36#endif /* not USE_OLD_TAG_SEARCH */
37
38/*
39 * The record below describes a canvas widget. It is made available
40 * to the item procedures so they can access certain shared fields such
41 * as the overall displacement and scale factor for the canvas.
42 */
43
44typedef struct TkCanvas {
45 Tk_Window tkwin; /* Window that embodies the canvas. NULL
46 * means that the window has been destroyed
47 * but the data structures haven't yet been
48 * cleaned up.*/
49 Display *display; /* Display containing widget; needed, among
50 * other things, to release resources after
51 * tkwin has already gone away. */
52 Tcl_Interp *interp; /* Interpreter associated with canvas. */
53 Tcl_Command widgetCmd; /* Token for canvas's widget command. */
54 Tk_Item *firstItemPtr; /* First in list of all items in canvas,
55 * or NULL if canvas empty. */
56 Tk_Item *lastItemPtr; /* Last in list of all items in canvas,
57 * or NULL if canvas empty. */
58
59 /*
60 * Information used when displaying widget:
61 */
62
63 int borderWidth; /* Width of 3-D border around window. */
64 Tk_3DBorder bgBorder; /* Used for canvas background. */
65 int relief; /* Indicates whether window as a whole is
66 * raised, sunken, or flat. */
67 int highlightWidth; /* Width in pixels of highlight to draw
68 * around widget when it has the focus.
69 * <= 0 means don't draw a highlight. */
70 XColor *highlightBgColorPtr;
71 /* Color for drawing traversal highlight
72 * area when highlight is off. */
73 XColor *highlightColorPtr; /* Color for drawing traversal highlight. */
74 int inset; /* Total width of all borders, including
75 * traversal highlight and 3-D border.
76 * Indicates how much interior stuff must
77 * be offset from outside edges to leave
78 * room for borders. */
79 GC pixmapGC; /* Used to copy bits from a pixmap to the
80 * screen and also to clear the pixmap. */
81 int width, height; /* Dimensions to request for canvas window,
82 * specified in pixels. */
83 int redrawX1, redrawY1; /* Upper left corner of area to redraw,
84 * in pixel coordinates. Border pixels
85 * are included. Only valid if
86 * REDRAW_PENDING flag is set. */
87 int redrawX2, redrawY2; /* Lower right corner of area to redraw,
88 * in integer canvas coordinates. Border
89 * pixels will *not* be redrawn. */
90 int confine; /* Non-zero means constrain view to keep
91 * as much of canvas visible as possible. */
92
93 /*
94 * Information used to manage the selection and insertion cursor:
95 */
96
97 Tk_CanvasTextInfo textInfo; /* Contains lots of fields; see tk.h for
98 * details. This structure is shared with
99 * the code that implements individual items. */
100 int insertOnTime; /* Number of milliseconds cursor should spend
101 * in "on" state for each blink. */
102 int insertOffTime; /* Number of milliseconds cursor should spend
103 * in "off" state for each blink. */
104 Tcl_TimerToken insertBlinkHandler;
105 /* Timer handler used to blink cursor on and
106 * off. */
107
108 /*
109 * Transformation applied to canvas as a whole: to compute screen
110 * coordinates (X,Y) from canvas coordinates (x,y), do the following:
111 *
112 * X = x - xOrigin;
113 * Y = y - yOrigin;
114 */
115
116 int xOrigin, yOrigin; /* Canvas coordinates corresponding to
117 * upper-left corner of window, given in
118 * canvas pixel units. */
119 int drawableXOrigin, drawableYOrigin;
120 /* During redisplay, these fields give the
121 * canvas coordinates corresponding to
122 * the upper-left corner of the drawable
123 * where items are actually being drawn
124 * (typically a pixmap smaller than the
125 * whole window). */
126
127 /*
128 * Information used for event bindings associated with items.
129 */
130
131 Tk_BindingTable bindingTable;
132 /* Table of all bindings currently defined
133 * for this canvas. NULL means that no
134 * bindings exist, so the table hasn't been
135 * created. Each "object" used for this
136 * table is either a Tk_Uid for a tag or
137 * the address of an item named by id. */
138 Tk_Item *currentItemPtr; /* The item currently containing the mouse
139 * pointer, or NULL if none. */
140 Tk_Item *newCurrentPtr; /* The item that is about to become the
141 * current one, or NULL. This field is
142 * used to detect deletions of the new
143 * current item pointer that occur during
144 * Leave processing of the previous current
145 * item. */
146 double closeEnough; /* The mouse is assumed to be inside an
147 * item if it is this close to it. */
148 XEvent pickEvent; /* The event upon which the current choice
149 * of currentItem is based. Must be saved
150 * so that if the currentItem is deleted,
151 * can pick another. */
152 int state; /* Last known modifier state. Used to
153 * defer picking a new current object
154 * while buttons are down. */
155
156 /*
157 * Information used for managing scrollbars:
158 */
159
160 LangCallback *xScrollCmd; /* Command prefix for communicating with
161 * horizontal scrollbar. NULL means no
162 * horizontal scrollbar. Malloc'ed*/
163 LangCallback *yScrollCmd; /* Command prefix for communicating with
164 * vertical scrollbar. NULL means no
165 * vertical scrollbar. Malloc'ed*/
166 int scrollX1, scrollY1, scrollX2, scrollY2;
167 /* These four coordinates define the region
168 * that is the 100% area for scrolling (i.e.
169 * these numbers determine the size and
170 * location of the sliders on scrollbars).
171 * Units are pixels in canvas coords. */
172 Arg regionArg; /* The option string from which scrollX1
173 * etc. are derived. Malloc'ed. */
174 int xScrollIncrement; /* If >0, defines a grid for horizontal
175 * scrolling. This is the size of the "unit",
176 * and the left edge of the screen will always
177 * lie on an even unit boundary. */
178 int yScrollIncrement; /* If >0, defines a grid for horizontal
179 * scrolling. This is the size of the "unit",
180 * and the left edge of the screen will always
181 * lie on an even unit boundary. */
182
183 /*
184 * Information used for scanning:
185 */
186
187 int scanX; /* X-position at which scan started (e.g.
188 * button was pressed here). */
189 int scanXOrigin; /* Value of xOrigin field when scan started. */
190 int scanY; /* Y-position at which scan started (e.g.
191 * button was pressed here). */
192 int scanYOrigin; /* Value of yOrigin field when scan started. */
193
194 /*
195 * Information used to speed up searches by remembering the last item
196 * created or found with an item id search.
197 */
198
199 Tk_Item *hotPtr; /* Pointer to "hot" item (one that's been
200 * recently used. NULL means there's no
201 * hot item. */
202 Tk_Item *hotPrevPtr; /* Pointer to predecessor to hotPtr (NULL
203 * means item is first in list). This is
204 * only a hint and may not really be hotPtr's
205 * predecessor. */
206
207 /*
208 * Miscellaneous information:
209 */
210
211 Tk_Cursor cursor; /* Current cursor for window, or None. */
212 char *takeFocus; /* Value of -takefocus option; not used in
213 * the C code, but used by keyboard traversal
214 * scripts. Malloc'ed, but may be NULL. */
215 double pixelsPerMM; /* Scale factor between MM and pixels;
216 * used when converting coordinates. */
217 int flags; /* Various flags; see below for
218 * definitions. */
219 int nextId; /* Number to use as id for next item
220 * created in widget. */
221 Tk_PostscriptInfo psInfo;
222 /* Pointer to information used for generating
223 * Postscript for the canvas. NULL means
224 * no Postscript is currently being
225 * generated. */
226 Tcl_HashTable idTable; /* Table of integer indices. */
227
228 /*
229 * Additional information, added by the 'dash'-patch
230 */
231
232 Tk_State canvas_state; /* state of canvas */
233 Tk_Tile tile;
234 Tk_Tile disabledTile;
235 Tk_TSOffset tsoffset;
236#ifndef USE_OLD_TAG_SEARCH
237 TagSearchExpr *bindTagExprs; /* linked list of tag expressions used in bindings */
238#endif
239 /* pTk additions */
240 Tk_Item *activeGroup; /* Which group item is active */
241} TkCanvas;
242
243/*
244 * Flag bits for canvases:
245 *
246 * REDRAW_PENDING - 1 means a DoWhenIdle handler has already
247 * been created to redraw some or all of the
248 * canvas.
249 * REDRAW_BORDERS - 1 means that the borders need to be redrawn
250 * during the next redisplay operation.
251 * REPICK_NEEDED - 1 means DisplayCanvas should pick a new
252 * current item before redrawing the canvas.
253 * GOT_FOCUS - 1 means the focus is currently in this
254 * widget, so should draw the insertion cursor
255 * and traversal highlight.
256 * CURSOR_ON - 1 means the insertion cursor is in the "on"
257 * phase of its blink cycle. 0 means either
258 * we don't have the focus or the cursor is in
259 * the "off" phase of its cycle.
260 * UPDATE_SCROLLBARS - 1 means the scrollbars should get updated
261 * as part of the next display operation.
262 * LEFT_GRABBED_ITEM - 1 means that the mouse left the current
263 * item while a grab was in effect, so we
264 * didn't change canvasPtr->currentItemPtr.
265 * REPICK_IN_PROGRESS - 1 means PickCurrentItem is currently
266 * executing. If it should be called recursively,
267 * it should simply return immediately.
268 * BBOX_NOT_EMPTY - 1 means that the bounding box of the area
269 * that should be redrawn is not empty.
270 */
271
272#define REDRAW_PENDING 1
273#define REDRAW_BORDERS 2
274#define REPICK_NEEDED 4
275#define GOT_FOCUS 8
276#define CURSOR_ON 0x10
277#define UPDATE_SCROLLBARS 0x20
278#define LEFT_GRABBED_ITEM 0x40
279#define REPICK_IN_PROGRESS 0x100
280#define BBOX_NOT_EMPTY 0x200
281
282/*
283 * Flag bits for canvas items (redraw_flags):
284 *
285 * FORCE_REDRAW - 1 means that the new coordinates of some
286 * item are not yet registered using
287 * Tk_CanvasEventuallyRedraw(). It should still
288 * be done by the general canvas code.
289 */
290
291#define FORCE_REDRAW 8
292
293/*
294 * The following definition is shared between tkCanvPs.c and tkCanvImg.c,
295 * and is used in generating postscript for images and windows.
296 */
297
298typedef struct TkColormapData { /* Hold color information for a window */
299 int separated; /* Whether to use separate color bands */
300 int color; /* Whether window is color or black/white */
301 int ncolors; /* Number of color values stored */
302 XColor *colors; /* Pixel value -> RGB mappings */
303 int red_mask, green_mask, blue_mask; /* Masks and shifts for each */
304 int red_shift, green_shift, blue_shift; /* color band */
305} TkColormapData;
306
307#define Tk_CanvasActiveGroup(canvas) ((TkCanvas *) (canvas))->activeGroup
308
309#define Tk_CanvasGroupHidden(canvas,itemPtr) \
310 ( Tk_CanvasActiveGroup(canvas) && \
311 (itemPtr)->group != Tk_CanvasActiveGroup(canvas)) || \
312 ( (itemPtr)->group && \
313 (itemPtr)->group != Tk_CanvasActiveGroup(canvas) && \
314 (itemPtr)->group->state != TK_STATE_ACTIVE )
315
316#define Tk_GetItemState(canvas,itemPtr) \
317( \
318 Tk_CanvasGroupHidden(canvas,itemPtr) \
319 ? TK_STATE_HIDDEN \
320 : (((itemPtr)->state == TK_STATE_NULL) \
321 ? ((TkCanvas *)(canvas))->canvas_state \
322 : (itemPtr)->state \
323 ) \
324)
325
326
327EXTERN void TkGroupRemoveItem _ANSI_ARGS_((Tk_Item *item));
328
329#endif /* _TKCANVAS */