Mercurial > repos > rliterman > csp2
comparison CSP2/CSP2_env/env-d9b9114564458d9d-741b3de822f2aaca6c6caa4325c4afce/include/tkCanvas.h @ 69:33d812a61356
planemo upload commit 2e9511a184a1ca667c7be0c6321a36dc4e3d116d
author | jpayne |
---|---|
date | Tue, 18 Mar 2025 17:55:14 -0400 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
67:0e9998148a16 | 69:33d812a61356 |
---|---|
1 /* | |
2 * tkCanvas.h -- | |
3 * | |
4 * Declarations shared among all the files that implement canvas widgets. | |
5 * | |
6 * Copyright (c) 1991-1994 The Regents of the University of California. | |
7 * Copyright (c) 1994-1995 Sun Microsystems, Inc. | |
8 * Copyright (c) 1998 by Scriptics Corporation. | |
9 * | |
10 * See the file "license.terms" for information on usage and redistribution of | |
11 * this file, and for a DISCLAIMER OF ALL WARRANTIES. | |
12 */ | |
13 | |
14 #ifndef _TKCANVAS | |
15 #define _TKCANVAS | |
16 | |
17 #ifndef _TK | |
18 #include "tk.h" | |
19 #endif | |
20 | |
21 #ifndef USE_OLD_TAG_SEARCH | |
22 typedef struct TagSearchExpr_s TagSearchExpr; | |
23 | |
24 struct TagSearchExpr_s { | |
25 TagSearchExpr *next; /* For linked lists of expressions - used in | |
26 * bindings. */ | |
27 Tk_Uid uid; /* The uid of the whole expression. */ | |
28 Tk_Uid *uids; /* Expresion compiled to an array of uids. */ | |
29 int allocated; /* Available space for array of uids. */ | |
30 int length; /* Length of expression. */ | |
31 int index; /* Current position in expression | |
32 * evaluation. */ | |
33 int match; /* This expression matches event's item's | |
34 * tags. */ | |
35 }; | |
36 #endif /* not USE_OLD_TAG_SEARCH */ | |
37 | |
38 /* | |
39 * The record below describes a canvas widget. It is made available to the | |
40 * item functions so they can access certain shared fields such as the overall | |
41 * displacement and scale factor for the canvas. | |
42 */ | |
43 | |
44 typedef struct TkCanvas { | |
45 Tk_Window tkwin; /* Window that embodies the canvas. NULL means | |
46 * that the window has been destroyed but the | |
47 * data structures haven't yet been cleaned | |
48 * 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, or | |
55 * NULL if canvas empty. */ | |
56 Tk_Item *lastItemPtr; /* Last in list of all items in canvas, or | |
57 * 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 around | |
68 * widget when it has the focus. <= 0 means | |
69 * don't draw a highlight. */ | |
70 XColor *highlightBgColorPtr; | |
71 /* Color for drawing traversal highlight area | |
72 * 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 be | |
77 * offset from outside edges to leave room for | |
78 * 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, in | |
84 * pixel coordinates. Border pixels are | |
85 * included. Only valid if REDRAW_PENDING flag | |
86 * is set. */ | |
87 int redrawX2, redrawY2; /* Lower right corner of area to redraw, in | |
88 * integer canvas coordinates. Border pixels | |
89 * will *not* be redrawn. */ | |
90 int confine; /* Non-zero means constrain view to keep as | |
91 * 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 the | |
99 * 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 the | |
122 * upper-left corner of the drawable where | |
123 * items are actually being drawn (typically a | |
124 * pixmap smaller than the whole window). */ | |
125 | |
126 /* | |
127 * Information used for event bindings associated with items. | |
128 */ | |
129 | |
130 Tk_BindingTable bindingTable; | |
131 /* Table of all bindings currently defined for | |
132 * this canvas. NULL means that no bindings | |
133 * exist, so the table hasn't been created. | |
134 * Each "object" used for this table is either | |
135 * a Tk_Uid for a tag or the address of an | |
136 * item named by id. */ | |
137 Tk_Item *currentItemPtr; /* The item currently containing the mouse | |
138 * pointer, or NULL if none. */ | |
139 Tk_Item *newCurrentPtr; /* The item that is about to become the | |
140 * current one, or NULL. This field is used to | |
141 * detect deletions of the new current item | |
142 * pointer that occur during Leave processing | |
143 * of the previous current item. */ | |
144 double closeEnough; /* The mouse is assumed to be inside an item | |
145 * if it is this close to it. */ | |
146 XEvent pickEvent; /* The event upon which the current choice of | |
147 * currentItem is based. Must be saved so that | |
148 * if the currentItem is deleted, can pick | |
149 * another. */ | |
150 int state; /* Last known modifier state. Used to defer | |
151 * picking a new current object while buttons | |
152 * are down. */ | |
153 | |
154 /* | |
155 * Information used for managing scrollbars: | |
156 */ | |
157 | |
158 char *xScrollCmd; /* Command prefix for communicating with | |
159 * horizontal scrollbar. NULL means no | |
160 * horizontal scrollbar. Malloc'ed. */ | |
161 char *yScrollCmd; /* Command prefix for communicating with | |
162 * vertical scrollbar. NULL means no vertical | |
163 * scrollbar. Malloc'ed. */ | |
164 int scrollX1, scrollY1, scrollX2, scrollY2; | |
165 /* These four coordinates define the region | |
166 * that is the 100% area for scrolling (i.e. | |
167 * these numbers determine the size and | |
168 * location of the sliders on scrollbars). | |
169 * Units are pixels in canvas coords. */ | |
170 char *regionString; /* The option string from which scrollX1 etc. | |
171 * are derived. Malloc'ed. */ | |
172 int xScrollIncrement; /* If >0, defines a grid for horizontal | |
173 * scrolling. This is the size of the "unit", | |
174 * and the left edge of the screen will always | |
175 * lie on an even unit boundary. */ | |
176 int yScrollIncrement; /* If >0, defines a grid for horizontal | |
177 * scrolling. This is the size of the "unit", | |
178 * and the left edge of the screen will always | |
179 * lie on an even unit boundary. */ | |
180 | |
181 /* | |
182 * Information used for scanning: | |
183 */ | |
184 | |
185 int scanX; /* X-position at which scan started (e.g. | |
186 * button was pressed here). */ | |
187 int scanXOrigin; /* Value of xOrigin field when scan started. */ | |
188 int scanY; /* Y-position at which scan started (e.g. | |
189 * button was pressed here). */ | |
190 int scanYOrigin; /* Value of yOrigin field when scan started. */ | |
191 | |
192 /* | |
193 * Information used to speed up searches by remembering the last item | |
194 * created or found with an item id search. | |
195 */ | |
196 | |
197 Tk_Item *hotPtr; /* Pointer to "hot" item (one that's been | |
198 * recently used. NULL means there's no hot | |
199 * item. */ | |
200 Tk_Item *hotPrevPtr; /* Pointer to predecessor to hotPtr (NULL | |
201 * means item is first in list). This is only | |
202 * a hint and may not really be hotPtr's | |
203 * predecessor. */ | |
204 | |
205 /* | |
206 * Miscellaneous information: | |
207 */ | |
208 | |
209 Tk_Cursor cursor; /* Current cursor for window, or NULL. */ | |
210 char *takeFocus; /* Value of -takefocus option; not used in the | |
211 * C code, but used by keyboard traversal | |
212 * scripts. Malloc'ed, but may be NULL. */ | |
213 double pixelsPerMM; /* Scale factor between MM and pixels; used | |
214 * when converting coordinates. */ | |
215 int flags; /* Various flags; see below for | |
216 * definitions. */ | |
217 int nextId; /* Number to use as id for next item created | |
218 * in widget. */ | |
219 Tk_PostscriptInfo psInfo; /* Pointer to information used for generating | |
220 * Postscript for the canvas. NULL means no | |
221 * Postscript is currently being generated. */ | |
222 Tcl_HashTable idTable; /* Table of integer indices. */ | |
223 | |
224 /* | |
225 * Additional information, added by the 'dash'-patch | |
226 */ | |
227 | |
228 void *reserved1; | |
229 Tk_State canvas_state; /* State of canvas. */ | |
230 void *reserved2; | |
231 void *reserved3; | |
232 Tk_TSOffset tsoffset; | |
233 #ifndef USE_OLD_TAG_SEARCH | |
234 TagSearchExpr *bindTagExprs;/* Linked list of tag expressions used in | |
235 * bindings. */ | |
236 #endif | |
237 } TkCanvas; | |
238 | |
239 /* | |
240 * Flag bits for canvases: | |
241 * | |
242 * REDRAW_PENDING - 1 means a DoWhenIdle handler has already been | |
243 * created to redraw some or all of the canvas. | |
244 * REDRAW_BORDERS - 1 means that the borders need to be redrawn | |
245 * during the next redisplay operation. | |
246 * REPICK_NEEDED - 1 means DisplayCanvas should pick a new | |
247 * current item before redrawing the canvas. | |
248 * GOT_FOCUS - 1 means the focus is currently in this widget, | |
249 * so should draw the insertion cursor and | |
250 * traversal highlight. | |
251 * CURSOR_ON - 1 means the insertion cursor is in the "on" | |
252 * phase of its blink cycle. 0 means either we | |
253 * don't have the focus or the cursor is in the | |
254 * "off" phase of its cycle. | |
255 * UPDATE_SCROLLBARS - 1 means the scrollbars should get updated as | |
256 * part of the next display operation. | |
257 * LEFT_GRABBED_ITEM - 1 means that the mouse left the current item | |
258 * while a grab was in effect, so we didn't | |
259 * change canvasPtr->currentItemPtr. | |
260 * REPICK_IN_PROGRESS - 1 means PickCurrentItem is currently | |
261 * executing. If it should be called recursively, | |
262 * it should simply return immediately. | |
263 * BBOX_NOT_EMPTY - 1 means that the bounding box of the area that | |
264 * should be redrawn is not empty. | |
265 */ | |
266 | |
267 #define REDRAW_PENDING 1 | |
268 #define REDRAW_BORDERS 2 | |
269 #define REPICK_NEEDED 4 | |
270 #define GOT_FOCUS 8 | |
271 #define CURSOR_ON 0x10 | |
272 #define UPDATE_SCROLLBARS 0x20 | |
273 #define LEFT_GRABBED_ITEM 0x40 | |
274 #define REPICK_IN_PROGRESS 0x100 | |
275 #define BBOX_NOT_EMPTY 0x200 | |
276 | |
277 /* | |
278 * Flag bits for canvas items (redraw_flags): | |
279 * | |
280 * FORCE_REDRAW - 1 means that the new coordinates of some item | |
281 * are not yet registered using | |
282 * Tk_CanvasEventuallyRedraw(). It should still | |
283 * be done by the general canvas code. | |
284 */ | |
285 | |
286 #define FORCE_REDRAW 8 | |
287 | |
288 /* | |
289 * Canvas-related functions that are shared among Tk modules but not exported | |
290 * to the outside world: | |
291 */ | |
292 | |
293 MODULE_SCOPE int TkCanvPostscriptCmd(TkCanvas *canvasPtr, | |
294 Tcl_Interp *interp, int argc, const char **argv); | |
295 MODULE_SCOPE int TkCanvTranslatePath(TkCanvas *canvPtr, | |
296 int numVertex, double *coordPtr, int closed, | |
297 XPoint *outPtr); | |
298 /* | |
299 * Standard item types provided by Tk: | |
300 */ | |
301 | |
302 MODULE_SCOPE Tk_ItemType tkArcType, tkBitmapType, tkImageType, tkLineType; | |
303 MODULE_SCOPE Tk_ItemType tkOvalType, tkPolygonType; | |
304 MODULE_SCOPE Tk_ItemType tkRectangleType, tkTextType, tkWindowType; | |
305 | |
306 /* | |
307 * Convenience macro. | |
308 */ | |
309 | |
310 #define Canvas(canvas) ((TkCanvas *) (canvas)) | |
311 | |
312 #endif /* _TKCANVAS */ |