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