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