xref: /plan9/sys/include/memlayer.h (revision feec15807e1ba3f3a9d13fd93f329f68adf0e1cd)
17dd7cddfSDavid du Colombier #pragma src "/sys/src/libmemlayer"
27dd7cddfSDavid du Colombier #pragma lib "libmemlayer.a"
37dd7cddfSDavid du Colombier 
47dd7cddfSDavid du Colombier typedef struct Memscreen Memscreen;
57dd7cddfSDavid du Colombier typedef void (*Refreshfn)(Memimage*, Rectangle, void*);
67dd7cddfSDavid du Colombier 
77dd7cddfSDavid du Colombier struct Memscreen
87dd7cddfSDavid du Colombier {
97dd7cddfSDavid du Colombier 	Memimage	*frontmost;	/* frontmost layer on screen */
107dd7cddfSDavid du Colombier 	Memimage	*rearmost;	/* rearmost layer on screen */
117dd7cddfSDavid du Colombier 	Memimage	*image;		/* upon which all layers are drawn */
127dd7cddfSDavid du Colombier 	Memimage	*fill;			/* if non-zero, picture to use when repainting */
137dd7cddfSDavid du Colombier };
147dd7cddfSDavid du Colombier 
157dd7cddfSDavid du Colombier struct Memlayer
167dd7cddfSDavid du Colombier {
177dd7cddfSDavid du Colombier 	Rectangle		screenr;	/* true position of layer on screen */
187dd7cddfSDavid du Colombier 	Point			delta;	/* add delta to go from image coords to screen */
197dd7cddfSDavid du Colombier 	Memscreen	*screen;	/* screen this layer belongs to */
207dd7cddfSDavid du Colombier 	Memimage	*front;	/* window in front of this one */
217dd7cddfSDavid du Colombier 	Memimage	*rear;	/* window behind this one*/
227dd7cddfSDavid du Colombier 	int		clear;	/* layer is fully visible */
237dd7cddfSDavid du Colombier 	Memimage	*save;	/* save area for obscured parts */
247dd7cddfSDavid du Colombier 	Refreshfn	refreshfn;		/* function to call to refresh obscured parts if save==nil */
257dd7cddfSDavid du Colombier 	void		*refreshptr;	/* argument to refreshfn */
267dd7cddfSDavid du Colombier };
277dd7cddfSDavid du Colombier 
287dd7cddfSDavid du Colombier /*
2980ee5cbfSDavid du Colombier  * These functions accept local coordinates
307dd7cddfSDavid du Colombier  */
317dd7cddfSDavid du Colombier int			memload(Memimage*, Rectangle, uchar*, int, int);
3280ee5cbfSDavid du Colombier int			memunload(Memimage*, Rectangle, uchar*, int);
337dd7cddfSDavid du Colombier 
347dd7cddfSDavid du Colombier /*
357dd7cddfSDavid du Colombier  * All these functions accept screen coordinates, not local ones.
367dd7cddfSDavid du Colombier  */
377dd7cddfSDavid du Colombier void			_memlayerop(void (*fn)(Memimage*, Rectangle, Rectangle, void*, int), Memimage*, Rectangle, Rectangle, void*);
387dd7cddfSDavid du Colombier Memimage*	memlalloc(Memscreen*, Rectangle, Refreshfn, void*, ulong);
397dd7cddfSDavid du Colombier void			memldelete(Memimage*);
407dd7cddfSDavid du Colombier void			memlfree(Memimage*);
417dd7cddfSDavid du Colombier void			memltofront(Memimage*);
427dd7cddfSDavid du Colombier void			memltofrontn(Memimage**, int);
43*feec1580SDavid du Colombier void			_memltofrontfill(Memimage*, int);
447dd7cddfSDavid du Colombier void			memltorear(Memimage*);
457dd7cddfSDavid du Colombier void			memltorearn(Memimage**, int);
467dd7cddfSDavid du Colombier int			memlsetrefresh(Memimage*, Refreshfn, void*);
477dd7cddfSDavid du Colombier void			memlhide(Memimage*, Rectangle);
487dd7cddfSDavid du Colombier void			memlexpose(Memimage*, Rectangle);
497dd7cddfSDavid du Colombier void			_memlsetclear(Memscreen*);
507dd7cddfSDavid du Colombier int			memlorigin(Memimage*, Point, Point);
517dd7cddfSDavid du Colombier void			memlnorefresh(Memimage*, Rectangle, void*);
52