xref: /inferno-os/libtk/canvs.h (revision 5849851a19380dbb62a47d9c4d868a81e42fa79b)
1 typedef struct TkCimeth TkCimeth;
2 typedef struct TkCitem TkCitem;
3 typedef struct TkCanvas TkCanvas;
4 typedef struct TkCline TkCline;
5 typedef struct TkCtag TkCtag;
6 typedef struct TkCpoints TkCpoints;
7 typedef struct TkCwind TkCwind;
8 
9 struct TkCline
10 {
11 	int		arrow;
12 	int		shape[3];
13 	int		width;
14 	Image*		stipple;
15 	Image*		pen;
16 	int		arrowf;
17 	int		arrowl;
18 	int		capstyle;
19 	int		smooth;
20 	int		steps;
21 };
22 
23 struct TkCwind
24 {
25 	Tk*		sub;		/* Subwindow of canvas */
26 	Tk*		focus;		/* Current Mouse focus */
27 	int		width;		/* Requested width */
28 	int		height;		/* Requested height */
29 	int		flags;		/* possible: Tkanchor|Tksetwidth|Tksetheight */
30 };
31 
32 struct TkCpoints
33 {
34 	int		npoint;		/* Number of points */
35 	Point*		parampt;	/* Parameters in fixed point */
36 	Point*		drawpt;		/* Draw coord in pixels */
37 	Rectangle	bb;		/* Bounding box in pixels */
38 };
39 
40 struct TkCitem
41 {
42 	int		id;		/* Unique id */
43 	int		type;		/* Object type */
44 	TkCpoints	p;		/* Points plus bounding box */
45 	TkEnv*		env;		/* Colors & fonts */
46 	TkCitem*	next;		/* Z order */
47 	TkName*		tags;		/* Temporary tag spot */
48 	TkCtag*		stag;		/* Real tag structure */
49 //	char		obj[TKSTRUCTALIGN];
50 };
51 
52 struct TkCtag
53 {
54 	TkCitem*	item;		/* Link to item */
55 	TkName*		name;		/* Text name or id */
56 	TkCtag*		taglist;	/* link items with this tag */
57 	TkCtag*		itemlist;	/* link tags for this item */
58 };
59 
60 enum
61 {
62 	/* Item types */
63 	TkCVline,
64 	TkCVtext,
65 	TkCVrect,
66 	TkCVoval,
67 	TkCVbitmap,
68 	TkCVpoly,
69 	TkCVwindow,
70 	TkCVimage,
71 	TkCVarc,
72 
73 	TkCselto	= 0,
74 	TkCselfrom,
75 	TkCseladjust,
76 
77 	TkCbufauto	= 0,
78 	TkCbufnone,
79 	TkCbufvisible,
80 	TkCbufall,
81 
82 	TkCadd		= 0,
83 	TkCfind,
84 
85 	TkChash		= 32,
86 
87 	TkCarrowf	= (1<<0),
88 	TkCarrowl	= (1<<1),
89 	Tknarrow	= 6		/* Number of points in arrow */
90 };
91 
92 struct TkCanvas
93 {
94 	int		close;
95 	int		confine;
96 	int		cleanup;
97 	int		scrollr[4];
98 	Rectangle	region;
99 	Rectangle	update;		/* Area to paint next draw */
100 	Point		view;
101 	TkCitem*	selection;
102 	int		width;
103 	int		height;
104 	int		sborderwidth;
105 	int		xscrolli;	/* Scroll increment */
106 	int		yscrolli;
107 	char*		xscroll;	/* Scroll commands */
108 	char*		yscroll;
109 	int		id;		/* Unique id */
110 	TkCitem*	head;		/* Items in Z order */
111 	TkCitem*	tail;		/* Head is lowest, tail is highest */
112 	TkCitem*	focus;		/* Keyboard focus */
113 	TkCitem*	mouse;		/* Mouse focus */
114 	TkCitem* grab;
115 	TkName*		current;	/* Fake for current tag */
116 	TkCtag		curtag;
117 	Image*		image;		/* Drawing space */
118 	int			ialloc;		/* image was allocated by us? */
119 	Image*		mask;		/* mask space (for stippling) */
120 	TkName*		thash[TkChash];	/* Tag hash */
121 	int		actions;
122 	int		actlim;
123 	int		buffer;
124 };
125 
126 struct TkCimeth
127 {
128 	char*	name;
129 	char*	(*create)(Tk*, char *arg, char **val);
130 	void	(*draw)(Image*, TkCitem*, TkEnv*);
131 	void	(*free)(TkCitem*);
132 	char*	(*coord)(TkCitem*, char*, int, int);
133 	char*	(*cget)(TkCitem*, char*, char**);
134 	char*	(*conf)(Tk*, TkCitem*, char*);
135 	int		(*hit)(TkCitem*, Point);
136 };
137 
138 extern	TkCimeth	tkcimethod[];
139 extern	int	cvslshape[];
140 extern	Rectangle	bbnil;
141 extern	Rectangle	huger;
142 
143 /* General */
144 extern	char*		tkcaddtag(Tk*, TkCitem*, int);
145 extern	TkCtag*		tkcfirsttag(TkCitem*, TkCtag*);
146 extern	TkCtag*		tkclasttag(TkCitem*, TkCtag*);
147 extern	void		tkcvsappend(TkCanvas*, TkCitem*);
148 extern	TkCitem*	 tkcnewitem(Tk*, int, int);
149 extern	void		tkcvsfreeitem(TkCitem*);
150 extern	Point		tkcvsrelpos(Tk*);
151 extern	Tk*		tkcvsinwindow(Tk*, Point*);
152 extern	char*		tkcvstextdchar(Tk*, TkCitem*, char*);
153 extern	char*		tkcvstextindex(Tk*, TkCitem*, char*, char **val);
154 extern	char*		tkcvstextinsert(Tk*, TkCitem*, char*);
155 extern	char*		tkcvstexticursor(Tk*, TkCitem*, char*);
156 extern	void		tkmkpen(Image**, TkEnv*, Image*);
157 extern	void		tkcvstextfocus(Tk*, TkCitem*, int);
158 extern	char*		tkcvstextselect(Tk*, TkCitem*, char*, int);
159 extern	void		tkcvstextclr(Tk*);
160 extern	Tk*		tkcvsevent(Tk*, int, void*);
161 extern	Point		tkcvsanchor(Point, int, int, int);
162 extern	void		tkcvsdirty(Tk*);
163 extern	void		tkfreectag(TkCtag*);
164 extern	char*		tkparsepts(TkTop*, TkCpoints*, char**, int);
165 extern	void		tkfreepoint(TkCpoints*);
166 extern	void		tkxlatepts(Point*, int, int, int);
167 extern	void		tkpolybound(Point*, int, Rectangle*);
168 extern	TkName*		tkctaglook(Tk*, TkName*, char*);
169 extern	void		tkbbmax(Rectangle*, Rectangle*);
170 extern	void		tkcvssetdirty(Tk*);
171 
172 /* Canvas Item methods - required to populate tkcimethod in canvs.c */
173 extern	char*	tkcvslinecreat(Tk*, char *arg, char **val);
174 extern	void	tkcvslinedraw(Image*, TkCitem*, TkEnv*);
175 extern	void	tkcvslinefree(TkCitem*);
176 extern	char*	tkcvslinecoord(TkCitem*, char*, int, int);
177 extern	char*	tkcvslinecget(TkCitem*, char*, char**);
178 extern	char*	tkcvslineconf(Tk*, TkCitem*, char*);
179 extern	int		tkcvslinehit(TkCitem*, Point);
180 
181 extern	char*	tkcvstextcreat(Tk*, char *arg, char **val);
182 extern	void	tkcvstextdraw(Image*, TkCitem*, TkEnv*);
183 extern	void	tkcvstextfree(TkCitem*);
184 extern	char*	tkcvstextcoord(TkCitem*, char*, int, int);
185 extern	char*	tkcvstextcget(TkCitem*, char*, char**);
186 extern	char*	tkcvstextconf(Tk*, TkCitem*, char*);
187 
188 extern	char*	tkcvsrectcreat(Tk*, char *arg, char **val);
189 extern	void	tkcvsrectdraw(Image*, TkCitem*, TkEnv*);
190 extern	void	tkcvsrectfree(TkCitem*);
191 extern	char*	tkcvsrectcoord(TkCitem*, char*, int, int);
192 extern	char*	tkcvsrectcget(TkCitem*, char*, char**);
193 extern	char*	tkcvsrectconf(Tk*, TkCitem*, char*);
194 
195 extern	char*	tkcvsovalcreat(Tk*, char *arg, char **val);
196 extern	void	tkcvsovaldraw(Image*, TkCitem*, TkEnv*);
197 extern	void	tkcvsovalfree(TkCitem*);
198 extern	char*	tkcvsovalcoord(TkCitem*, char*, int, int);
199 extern	char*	tkcvsovalcget(TkCitem*, char*, char**);
200 extern	char*	tkcvsovalconf(Tk*, TkCitem*, char*);
201 extern	int		tkcvsovalhit(TkCitem*, Point);
202 
203 extern	char*	tkcvsarccreat(Tk*, char *arg, char **val);
204 extern	void	tkcvsarcdraw(Image*, TkCitem*, TkEnv*);
205 extern	void	tkcvsarcfree(TkCitem*);
206 extern	char*	tkcvsarccoord(TkCitem*, char*, int, int);
207 extern	char*	tkcvsarccget(TkCitem*, char*, char**);
208 extern	char*	tkcvsarcconf(Tk*, TkCitem*, char*);
209 
210 extern	char*	tkcvsbitcreat(Tk*, char *arg, char **val);
211 extern	void	tkcvsbitdraw(Image*, TkCitem*, TkEnv*);
212 extern	void	tkcvsbitfree(TkCitem*);
213 extern	char*	tkcvsbitcoord(TkCitem*, char*, int, int);
214 extern	char*	tkcvsbitcget(TkCitem*, char*, char**);
215 extern	char*	tkcvsbitconf(Tk*, TkCitem*, char*);
216 
217 extern	char*	tkcvswindcreat(Tk*, char *arg, char **val);
218 extern	void	tkcvswinddraw(Image*, TkCitem*, TkEnv*);
219 extern	void	tkcvswindfree(TkCitem*);
220 extern	char*	tkcvswindcoord(TkCitem*, char*, int, int);
221 extern	char*	tkcvswindcget(TkCitem*, char*, char**);
222 extern	char*	tkcvswindconf(Tk*, TkCitem*, char*);
223 
224 extern	char*	tkcvspolycreat(Tk*, char *arg, char **val);
225 extern	void	tkcvspolydraw(Image*, TkCitem*, TkEnv*);
226 extern	void	tkcvspolyfree(TkCitem*);
227 extern	char*	tkcvspolycoord(TkCitem*, char*, int, int);
228 extern	char*	tkcvspolycget(TkCitem*, char*, char**);
229 extern	char*	tkcvspolyconf(Tk*, TkCitem*, char*);
230 extern	int		tkcvspolyhit(TkCitem*, Point);
231 
232 extern	char*	tkcvsimgcreat(Tk*, char *arg, char **val);
233 extern	void	tkcvsimgdraw(Image*, TkCitem*, TkEnv*);
234 extern	void	tkcvsimgfree(TkCitem*);
235 extern	char*	tkcvsimgcoord(TkCitem*, char*, int, int);
236 extern	char*	tkcvsimgcget(TkCitem*, char*, char**);
237 extern	char*	tkcvsimgconf(Tk*, TkCitem*, char*);
238 
239 extern	TkCitem*	tkcvsfindwin(Tk*);
240 extern	void		tkcvsforgetsub(Tk*, Tk*);
241