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