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