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