xref: /plan9/sys/src/cmd/unix/drawterm/include/memlayer.h (revision 8ccd4a6360d974db7bd7bbd4f37e7018419ea908)
1*8ccd4a63SDavid du Colombier #ifdef PLAN9
2*8ccd4a63SDavid du Colombier #pragma src "/sys/src/libmemlayer"
3*8ccd4a63SDavid du Colombier #pragma lib "libmemlayer.a"
4*8ccd4a63SDavid du Colombier #endif
5*8ccd4a63SDavid du Colombier 
6*8ccd4a63SDavid du Colombier typedef struct Memscreen Memscreen;
7*8ccd4a63SDavid du Colombier typedef void (*Refreshfn)(Memimage*, Rectangle, void*);
8*8ccd4a63SDavid du Colombier 
9*8ccd4a63SDavid du Colombier struct Memscreen
10*8ccd4a63SDavid du Colombier {
11*8ccd4a63SDavid du Colombier 	Memimage	*frontmost;	/* frontmost layer on screen */
12*8ccd4a63SDavid du Colombier 	Memimage	*rearmost;	/* rearmost layer on screen */
13*8ccd4a63SDavid du Colombier 	Memimage	*image;		/* upon which all layers are drawn */
14*8ccd4a63SDavid du Colombier 	Memimage	*fill;			/* if non-zero, picture to use when repainting */
15*8ccd4a63SDavid du Colombier };
16*8ccd4a63SDavid du Colombier 
17*8ccd4a63SDavid du Colombier struct Memlayer
18*8ccd4a63SDavid du Colombier {
19*8ccd4a63SDavid du Colombier 	Rectangle		screenr;	/* true position of layer on screen */
20*8ccd4a63SDavid du Colombier 	Point			delta;	/* add delta to go from image coords to screen */
21*8ccd4a63SDavid du Colombier 	Memscreen	*screen;	/* screen this layer belongs to */
22*8ccd4a63SDavid du Colombier 	Memimage	*front;	/* window in front of this one */
23*8ccd4a63SDavid du Colombier 	Memimage	*rear;	/* window behind this one*/
24*8ccd4a63SDavid du Colombier 	int		clear;	/* layer is fully visible */
25*8ccd4a63SDavid du Colombier 	Memimage	*save;	/* save area for obscured parts */
26*8ccd4a63SDavid du Colombier 	Refreshfn	refreshfn;		/* function to call to refresh obscured parts if save==nil */
27*8ccd4a63SDavid du Colombier 	void		*refreshptr;	/* argument to refreshfn */
28*8ccd4a63SDavid du Colombier };
29*8ccd4a63SDavid du Colombier 
30*8ccd4a63SDavid du Colombier /*
31*8ccd4a63SDavid du Colombier  * These functions accept local coordinates
32*8ccd4a63SDavid du Colombier  */
33*8ccd4a63SDavid du Colombier int			memload(Memimage*, Rectangle, uchar*, int, int);
34*8ccd4a63SDavid du Colombier int			memunload(Memimage*, Rectangle, uchar*, int);
35*8ccd4a63SDavid du Colombier 
36*8ccd4a63SDavid du Colombier /*
37*8ccd4a63SDavid du Colombier  * All these functions accept screen coordinates, not local ones.
38*8ccd4a63SDavid du Colombier  */
39*8ccd4a63SDavid du Colombier void			_memlayerop(void (*fn)(Memimage*, Rectangle, Rectangle, void*, int), Memimage*, Rectangle, Rectangle, void*);
40*8ccd4a63SDavid du Colombier Memimage*	memlalloc(Memscreen*, Rectangle, Refreshfn, void*, ulong);
41*8ccd4a63SDavid du Colombier void			memldelete(Memimage*);
42*8ccd4a63SDavid du Colombier void			memlfree(Memimage*);
43*8ccd4a63SDavid du Colombier void			memltofront(Memimage*);
44*8ccd4a63SDavid du Colombier void			memltofrontn(Memimage**, int);
45*8ccd4a63SDavid du Colombier void			_memltofrontfill(Memimage*, int);
46*8ccd4a63SDavid du Colombier void			memltorear(Memimage*);
47*8ccd4a63SDavid du Colombier void			memltorearn(Memimage**, int);
48*8ccd4a63SDavid du Colombier int			memlsetrefresh(Memimage*, Refreshfn, void*);
49*8ccd4a63SDavid du Colombier void			memlhide(Memimage*, Rectangle);
50*8ccd4a63SDavid du Colombier void			memlexpose(Memimage*, Rectangle);
51*8ccd4a63SDavid du Colombier void			_memlsetclear(Memscreen*);
52*8ccd4a63SDavid du Colombier int			memlorigin(Memimage*, Point, Point);
53*8ccd4a63SDavid du Colombier void			memlnorefresh(Memimage*, Rectangle, void*);
54