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