xref: /inferno-os/libtk/canvs.h (revision 5849851a19380dbb62a47d9c4d868a81e42fa79b)
137da2899SCharles.Forsyth typedef struct TkCimeth TkCimeth;
237da2899SCharles.Forsyth typedef struct TkCitem TkCitem;
337da2899SCharles.Forsyth typedef struct TkCanvas TkCanvas;
437da2899SCharles.Forsyth typedef struct TkCline TkCline;
537da2899SCharles.Forsyth typedef struct TkCtag TkCtag;
637da2899SCharles.Forsyth typedef struct TkCpoints TkCpoints;
737da2899SCharles.Forsyth typedef struct TkCwind TkCwind;
837da2899SCharles.Forsyth 
937da2899SCharles.Forsyth struct TkCline
1037da2899SCharles.Forsyth {
1137da2899SCharles.Forsyth 	int		arrow;
1237da2899SCharles.Forsyth 	int		shape[3];
1337da2899SCharles.Forsyth 	int		width;
1437da2899SCharles.Forsyth 	Image*		stipple;
1537da2899SCharles.Forsyth 	Image*		pen;
1637da2899SCharles.Forsyth 	int		arrowf;
1737da2899SCharles.Forsyth 	int		arrowl;
1837da2899SCharles.Forsyth 	int		capstyle;
1937da2899SCharles.Forsyth 	int		smooth;
2037da2899SCharles.Forsyth 	int		steps;
2137da2899SCharles.Forsyth };
2237da2899SCharles.Forsyth 
2337da2899SCharles.Forsyth struct TkCwind
2437da2899SCharles.Forsyth {
2537da2899SCharles.Forsyth 	Tk*		sub;		/* Subwindow of canvas */
2637da2899SCharles.Forsyth 	Tk*		focus;		/* Current Mouse focus */
2737da2899SCharles.Forsyth 	int		width;		/* Requested width */
2837da2899SCharles.Forsyth 	int		height;		/* Requested height */
2937da2899SCharles.Forsyth 	int		flags;		/* possible: Tkanchor|Tksetwidth|Tksetheight */
3037da2899SCharles.Forsyth };
3137da2899SCharles.Forsyth 
3237da2899SCharles.Forsyth struct TkCpoints
3337da2899SCharles.Forsyth {
3437da2899SCharles.Forsyth 	int		npoint;		/* Number of points */
3537da2899SCharles.Forsyth 	Point*		parampt;	/* Parameters in fixed point */
3637da2899SCharles.Forsyth 	Point*		drawpt;		/* Draw coord in pixels */
3737da2899SCharles.Forsyth 	Rectangle	bb;		/* Bounding box in pixels */
3837da2899SCharles.Forsyth };
3937da2899SCharles.Forsyth 
4037da2899SCharles.Forsyth struct TkCitem
4137da2899SCharles.Forsyth {
4237da2899SCharles.Forsyth 	int		id;		/* Unique id */
4337da2899SCharles.Forsyth 	int		type;		/* Object type */
4437da2899SCharles.Forsyth 	TkCpoints	p;		/* Points plus bounding box */
4537da2899SCharles.Forsyth 	TkEnv*		env;		/* Colors & fonts */
4637da2899SCharles.Forsyth 	TkCitem*	next;		/* Z order */
4737da2899SCharles.Forsyth 	TkName*		tags;		/* Temporary tag spot */
4837da2899SCharles.Forsyth 	TkCtag*		stag;		/* Real tag structure */
4937da2899SCharles.Forsyth //	char		obj[TKSTRUCTALIGN];
5037da2899SCharles.Forsyth };
5137da2899SCharles.Forsyth 
5237da2899SCharles.Forsyth struct TkCtag
5337da2899SCharles.Forsyth {
5437da2899SCharles.Forsyth 	TkCitem*	item;		/* Link to item */
5537da2899SCharles.Forsyth 	TkName*		name;		/* Text name or id */
5637da2899SCharles.Forsyth 	TkCtag*		taglist;	/* link items with this tag */
5737da2899SCharles.Forsyth 	TkCtag*		itemlist;	/* link tags for this item */
5837da2899SCharles.Forsyth };
5937da2899SCharles.Forsyth 
6037da2899SCharles.Forsyth enum
6137da2899SCharles.Forsyth {
6237da2899SCharles.Forsyth 	/* Item types */
6337da2899SCharles.Forsyth 	TkCVline,
6437da2899SCharles.Forsyth 	TkCVtext,
6537da2899SCharles.Forsyth 	TkCVrect,
6637da2899SCharles.Forsyth 	TkCVoval,
6737da2899SCharles.Forsyth 	TkCVbitmap,
6837da2899SCharles.Forsyth 	TkCVpoly,
6937da2899SCharles.Forsyth 	TkCVwindow,
7037da2899SCharles.Forsyth 	TkCVimage,
7137da2899SCharles.Forsyth 	TkCVarc,
7237da2899SCharles.Forsyth 
7337da2899SCharles.Forsyth 	TkCselto	= 0,
7437da2899SCharles.Forsyth 	TkCselfrom,
7537da2899SCharles.Forsyth 	TkCseladjust,
7637da2899SCharles.Forsyth 
7737da2899SCharles.Forsyth 	TkCbufauto	= 0,
7837da2899SCharles.Forsyth 	TkCbufnone,
7937da2899SCharles.Forsyth 	TkCbufvisible,
8037da2899SCharles.Forsyth 	TkCbufall,
8137da2899SCharles.Forsyth 
8237da2899SCharles.Forsyth 	TkCadd		= 0,
8337da2899SCharles.Forsyth 	TkCfind,
8437da2899SCharles.Forsyth 
8537da2899SCharles.Forsyth 	TkChash		= 32,
8637da2899SCharles.Forsyth 
8737da2899SCharles.Forsyth 	TkCarrowf	= (1<<0),
8837da2899SCharles.Forsyth 	TkCarrowl	= (1<<1),
8937da2899SCharles.Forsyth 	Tknarrow	= 6		/* Number of points in arrow */
9037da2899SCharles.Forsyth };
9137da2899SCharles.Forsyth 
9237da2899SCharles.Forsyth struct TkCanvas
9337da2899SCharles.Forsyth {
9437da2899SCharles.Forsyth 	int		close;
9537da2899SCharles.Forsyth 	int		confine;
9637da2899SCharles.Forsyth 	int		cleanup;
9737da2899SCharles.Forsyth 	int		scrollr[4];
9837da2899SCharles.Forsyth 	Rectangle	region;
9937da2899SCharles.Forsyth 	Rectangle	update;		/* Area to paint next draw */
10037da2899SCharles.Forsyth 	Point		view;
10137da2899SCharles.Forsyth 	TkCitem*	selection;
10237da2899SCharles.Forsyth 	int		width;
10337da2899SCharles.Forsyth 	int		height;
10437da2899SCharles.Forsyth 	int		sborderwidth;
10537da2899SCharles.Forsyth 	int		xscrolli;	/* Scroll increment */
10637da2899SCharles.Forsyth 	int		yscrolli;
10737da2899SCharles.Forsyth 	char*		xscroll;	/* Scroll commands */
10837da2899SCharles.Forsyth 	char*		yscroll;
10937da2899SCharles.Forsyth 	int		id;		/* Unique id */
11037da2899SCharles.Forsyth 	TkCitem*	head;		/* Items in Z order */
11137da2899SCharles.Forsyth 	TkCitem*	tail;		/* Head is lowest, tail is highest */
11237da2899SCharles.Forsyth 	TkCitem*	focus;		/* Keyboard focus */
11337da2899SCharles.Forsyth 	TkCitem*	mouse;		/* Mouse focus */
11437da2899SCharles.Forsyth 	TkCitem* grab;
11537da2899SCharles.Forsyth 	TkName*		current;	/* Fake for current tag */
11637da2899SCharles.Forsyth 	TkCtag		curtag;
11737da2899SCharles.Forsyth 	Image*		image;		/* Drawing space */
11837da2899SCharles.Forsyth 	int			ialloc;		/* image was allocated by us? */
11937da2899SCharles.Forsyth 	Image*		mask;		/* mask space (for stippling) */
12037da2899SCharles.Forsyth 	TkName*		thash[TkChash];	/* Tag hash */
12137da2899SCharles.Forsyth 	int		actions;
12237da2899SCharles.Forsyth 	int		actlim;
12337da2899SCharles.Forsyth 	int		buffer;
12437da2899SCharles.Forsyth };
12537da2899SCharles.Forsyth 
12637da2899SCharles.Forsyth struct TkCimeth
12737da2899SCharles.Forsyth {
12837da2899SCharles.Forsyth 	char*	name;
12937da2899SCharles.Forsyth 	char*	(*create)(Tk*, char *arg, char **val);
13037da2899SCharles.Forsyth 	void	(*draw)(Image*, TkCitem*, TkEnv*);
13137da2899SCharles.Forsyth 	void	(*free)(TkCitem*);
13237da2899SCharles.Forsyth 	char*	(*coord)(TkCitem*, char*, int, int);
13337da2899SCharles.Forsyth 	char*	(*cget)(TkCitem*, char*, char**);
13437da2899SCharles.Forsyth 	char*	(*conf)(Tk*, TkCitem*, char*);
13537da2899SCharles.Forsyth 	int		(*hit)(TkCitem*, Point);
13637da2899SCharles.Forsyth };
13737da2899SCharles.Forsyth 
13837da2899SCharles.Forsyth extern	TkCimeth	tkcimethod[];
13937da2899SCharles.Forsyth extern	int	cvslshape[];
14037da2899SCharles.Forsyth extern	Rectangle	bbnil;
14137da2899SCharles.Forsyth extern	Rectangle	huger;
14237da2899SCharles.Forsyth 
14337da2899SCharles.Forsyth /* General */
14437da2899SCharles.Forsyth extern	char*		tkcaddtag(Tk*, TkCitem*, int);
14537da2899SCharles.Forsyth extern	TkCtag*		tkcfirsttag(TkCitem*, TkCtag*);
14637da2899SCharles.Forsyth extern	TkCtag*		tkclasttag(TkCitem*, TkCtag*);
14737da2899SCharles.Forsyth extern	void		tkcvsappend(TkCanvas*, TkCitem*);
14837da2899SCharles.Forsyth extern	TkCitem*	 tkcnewitem(Tk*, int, int);
14937da2899SCharles.Forsyth extern	void		tkcvsfreeitem(TkCitem*);
15037da2899SCharles.Forsyth extern	Point		tkcvsrelpos(Tk*);
15137da2899SCharles.Forsyth extern	Tk*		tkcvsinwindow(Tk*, Point*);
15237da2899SCharles.Forsyth extern	char*		tkcvstextdchar(Tk*, TkCitem*, char*);
15337da2899SCharles.Forsyth extern	char*		tkcvstextindex(Tk*, TkCitem*, char*, char **val);
15437da2899SCharles.Forsyth extern	char*		tkcvstextinsert(Tk*, TkCitem*, char*);
15537da2899SCharles.Forsyth extern	char*		tkcvstexticursor(Tk*, TkCitem*, char*);
15637da2899SCharles.Forsyth extern	void		tkmkpen(Image**, TkEnv*, Image*);
15737da2899SCharles.Forsyth extern	void		tkcvstextfocus(Tk*, TkCitem*, int);
15837da2899SCharles.Forsyth extern	char*		tkcvstextselect(Tk*, TkCitem*, char*, int);
15937da2899SCharles.Forsyth extern	void		tkcvstextclr(Tk*);
16037da2899SCharles.Forsyth extern	Tk*		tkcvsevent(Tk*, int, void*);
16137da2899SCharles.Forsyth extern	Point		tkcvsanchor(Point, int, int, int);
16237da2899SCharles.Forsyth extern	void		tkcvsdirty(Tk*);
16337da2899SCharles.Forsyth extern	void		tkfreectag(TkCtag*);
16437da2899SCharles.Forsyth extern	char*		tkparsepts(TkTop*, TkCpoints*, char**, int);
16537da2899SCharles.Forsyth extern	void		tkfreepoint(TkCpoints*);
16637da2899SCharles.Forsyth extern	void		tkxlatepts(Point*, int, int, int);
16737da2899SCharles.Forsyth extern	void		tkpolybound(Point*, int, Rectangle*);
16837da2899SCharles.Forsyth extern	TkName*		tkctaglook(Tk*, TkName*, char*);
16937da2899SCharles.Forsyth extern	void		tkbbmax(Rectangle*, Rectangle*);
17037da2899SCharles.Forsyth extern	void		tkcvssetdirty(Tk*);
17137da2899SCharles.Forsyth 
17237da2899SCharles.Forsyth /* Canvas Item methods - required to populate tkcimethod in canvs.c */
17337da2899SCharles.Forsyth extern	char*	tkcvslinecreat(Tk*, char *arg, char **val);
17437da2899SCharles.Forsyth extern	void	tkcvslinedraw(Image*, TkCitem*, TkEnv*);
17537da2899SCharles.Forsyth extern	void	tkcvslinefree(TkCitem*);
17637da2899SCharles.Forsyth extern	char*	tkcvslinecoord(TkCitem*, char*, int, int);
17737da2899SCharles.Forsyth extern	char*	tkcvslinecget(TkCitem*, char*, char**);
17837da2899SCharles.Forsyth extern	char*	tkcvslineconf(Tk*, TkCitem*, char*);
17937da2899SCharles.Forsyth extern	int		tkcvslinehit(TkCitem*, Point);
18037da2899SCharles.Forsyth 
18137da2899SCharles.Forsyth extern	char*	tkcvstextcreat(Tk*, char *arg, char **val);
18237da2899SCharles.Forsyth extern	void	tkcvstextdraw(Image*, TkCitem*, TkEnv*);
18337da2899SCharles.Forsyth extern	void	tkcvstextfree(TkCitem*);
18437da2899SCharles.Forsyth extern	char*	tkcvstextcoord(TkCitem*, char*, int, int);
18537da2899SCharles.Forsyth extern	char*	tkcvstextcget(TkCitem*, char*, char**);
18637da2899SCharles.Forsyth extern	char*	tkcvstextconf(Tk*, TkCitem*, char*);
18737da2899SCharles.Forsyth 
18837da2899SCharles.Forsyth extern	char*	tkcvsrectcreat(Tk*, char *arg, char **val);
18937da2899SCharles.Forsyth extern	void	tkcvsrectdraw(Image*, TkCitem*, TkEnv*);
19037da2899SCharles.Forsyth extern	void	tkcvsrectfree(TkCitem*);
19137da2899SCharles.Forsyth extern	char*	tkcvsrectcoord(TkCitem*, char*, int, int);
19237da2899SCharles.Forsyth extern	char*	tkcvsrectcget(TkCitem*, char*, char**);
19337da2899SCharles.Forsyth extern	char*	tkcvsrectconf(Tk*, TkCitem*, char*);
19437da2899SCharles.Forsyth 
19537da2899SCharles.Forsyth extern	char*	tkcvsovalcreat(Tk*, char *arg, char **val);
19637da2899SCharles.Forsyth extern	void	tkcvsovaldraw(Image*, TkCitem*, TkEnv*);
19737da2899SCharles.Forsyth extern	void	tkcvsovalfree(TkCitem*);
19837da2899SCharles.Forsyth extern	char*	tkcvsovalcoord(TkCitem*, char*, int, int);
19937da2899SCharles.Forsyth extern	char*	tkcvsovalcget(TkCitem*, char*, char**);
20037da2899SCharles.Forsyth extern	char*	tkcvsovalconf(Tk*, TkCitem*, char*);
20137da2899SCharles.Forsyth extern	int		tkcvsovalhit(TkCitem*, Point);
20237da2899SCharles.Forsyth 
20337da2899SCharles.Forsyth extern	char*	tkcvsarccreat(Tk*, char *arg, char **val);
20437da2899SCharles.Forsyth extern	void	tkcvsarcdraw(Image*, TkCitem*, TkEnv*);
20537da2899SCharles.Forsyth extern	void	tkcvsarcfree(TkCitem*);
20637da2899SCharles.Forsyth extern	char*	tkcvsarccoord(TkCitem*, char*, int, int);
20737da2899SCharles.Forsyth extern	char*	tkcvsarccget(TkCitem*, char*, char**);
20837da2899SCharles.Forsyth extern	char*	tkcvsarcconf(Tk*, TkCitem*, char*);
20937da2899SCharles.Forsyth 
21037da2899SCharles.Forsyth extern	char*	tkcvsbitcreat(Tk*, char *arg, char **val);
21137da2899SCharles.Forsyth extern	void	tkcvsbitdraw(Image*, TkCitem*, TkEnv*);
21237da2899SCharles.Forsyth extern	void	tkcvsbitfree(TkCitem*);
21337da2899SCharles.Forsyth extern	char*	tkcvsbitcoord(TkCitem*, char*, int, int);
21437da2899SCharles.Forsyth extern	char*	tkcvsbitcget(TkCitem*, char*, char**);
21537da2899SCharles.Forsyth extern	char*	tkcvsbitconf(Tk*, TkCitem*, char*);
21637da2899SCharles.Forsyth 
21737da2899SCharles.Forsyth extern	char*	tkcvswindcreat(Tk*, char *arg, char **val);
21837da2899SCharles.Forsyth extern	void	tkcvswinddraw(Image*, TkCitem*, TkEnv*);
21937da2899SCharles.Forsyth extern	void	tkcvswindfree(TkCitem*);
22037da2899SCharles.Forsyth extern	char*	tkcvswindcoord(TkCitem*, char*, int, int);
22137da2899SCharles.Forsyth extern	char*	tkcvswindcget(TkCitem*, char*, char**);
22237da2899SCharles.Forsyth extern	char*	tkcvswindconf(Tk*, TkCitem*, char*);
22337da2899SCharles.Forsyth 
22437da2899SCharles.Forsyth extern	char*	tkcvspolycreat(Tk*, char *arg, char **val);
22537da2899SCharles.Forsyth extern	void	tkcvspolydraw(Image*, TkCitem*, TkEnv*);
22637da2899SCharles.Forsyth extern	void	tkcvspolyfree(TkCitem*);
22737da2899SCharles.Forsyth extern	char*	tkcvspolycoord(TkCitem*, char*, int, int);
22837da2899SCharles.Forsyth extern	char*	tkcvspolycget(TkCitem*, char*, char**);
22937da2899SCharles.Forsyth extern	char*	tkcvspolyconf(Tk*, TkCitem*, char*);
23037da2899SCharles.Forsyth extern	int		tkcvspolyhit(TkCitem*, Point);
23137da2899SCharles.Forsyth 
23237da2899SCharles.Forsyth extern	char*	tkcvsimgcreat(Tk*, char *arg, char **val);
23337da2899SCharles.Forsyth extern	void	tkcvsimgdraw(Image*, TkCitem*, TkEnv*);
23437da2899SCharles.Forsyth extern	void	tkcvsimgfree(TkCitem*);
23537da2899SCharles.Forsyth extern	char*	tkcvsimgcoord(TkCitem*, char*, int, int);
23637da2899SCharles.Forsyth extern	char*	tkcvsimgcget(TkCitem*, char*, char**);
23737da2899SCharles.Forsyth extern	char*	tkcvsimgconf(Tk*, TkCitem*, char*);
23837da2899SCharles.Forsyth 
239*5849851aSforsyth extern	TkCitem*	tkcvsfindwin(Tk*);
240*5849851aSforsyth extern	void		tkcvsforgetsub(Tk*, Tk*);
241