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