17dd7cddfSDavid du Colombier #pragma src "/sys/src/libmemlayer" 27dd7cddfSDavid du Colombier #pragma lib "libmemlayer.a" 37dd7cddfSDavid du Colombier 47dd7cddfSDavid du Colombier typedef struct Memscreen Memscreen; 57dd7cddfSDavid du Colombier typedef void (*Refreshfn)(Memimage*, Rectangle, void*); 67dd7cddfSDavid du Colombier 77dd7cddfSDavid du Colombier struct Memscreen 87dd7cddfSDavid du Colombier { 97dd7cddfSDavid du Colombier Memimage *frontmost; /* frontmost layer on screen */ 107dd7cddfSDavid du Colombier Memimage *rearmost; /* rearmost layer on screen */ 117dd7cddfSDavid du Colombier Memimage *image; /* upon which all layers are drawn */ 127dd7cddfSDavid du Colombier Memimage *fill; /* if non-zero, picture to use when repainting */ 137dd7cddfSDavid du Colombier }; 147dd7cddfSDavid du Colombier 157dd7cddfSDavid du Colombier struct Memlayer 167dd7cddfSDavid du Colombier { 177dd7cddfSDavid du Colombier Rectangle screenr; /* true position of layer on screen */ 187dd7cddfSDavid du Colombier Point delta; /* add delta to go from image coords to screen */ 197dd7cddfSDavid du Colombier Memscreen *screen; /* screen this layer belongs to */ 207dd7cddfSDavid du Colombier Memimage *front; /* window in front of this one */ 217dd7cddfSDavid du Colombier Memimage *rear; /* window behind this one*/ 227dd7cddfSDavid du Colombier int clear; /* layer is fully visible */ 237dd7cddfSDavid du Colombier Memimage *save; /* save area for obscured parts */ 247dd7cddfSDavid du Colombier Refreshfn refreshfn; /* function to call to refresh obscured parts if save==nil */ 257dd7cddfSDavid du Colombier void *refreshptr; /* argument to refreshfn */ 267dd7cddfSDavid du Colombier }; 277dd7cddfSDavid du Colombier 287dd7cddfSDavid du Colombier /* 2980ee5cbfSDavid du Colombier * These functions accept local coordinates 307dd7cddfSDavid du Colombier */ 317dd7cddfSDavid du Colombier int memload(Memimage*, Rectangle, uchar*, int, int); 3280ee5cbfSDavid du Colombier int memunload(Memimage*, Rectangle, uchar*, int); 337dd7cddfSDavid du Colombier 347dd7cddfSDavid du Colombier /* 357dd7cddfSDavid du Colombier * All these functions accept screen coordinates, not local ones. 367dd7cddfSDavid du Colombier */ 377dd7cddfSDavid du Colombier void _memlayerop(void (*fn)(Memimage*, Rectangle, Rectangle, void*, int), Memimage*, Rectangle, Rectangle, void*); 387dd7cddfSDavid du Colombier Memimage* memlalloc(Memscreen*, Rectangle, Refreshfn, void*, ulong); 397dd7cddfSDavid du Colombier void memldelete(Memimage*); 407dd7cddfSDavid du Colombier void memlfree(Memimage*); 417dd7cddfSDavid du Colombier void memltofront(Memimage*); 427dd7cddfSDavid du Colombier void memltofrontn(Memimage**, int); 43*feec1580SDavid du Colombier void _memltofrontfill(Memimage*, int); 447dd7cddfSDavid du Colombier void memltorear(Memimage*); 457dd7cddfSDavid du Colombier void memltorearn(Memimage**, int); 467dd7cddfSDavid du Colombier int memlsetrefresh(Memimage*, Refreshfn, void*); 477dd7cddfSDavid du Colombier void memlhide(Memimage*, Rectangle); 487dd7cddfSDavid du Colombier void memlexpose(Memimage*, Rectangle); 497dd7cddfSDavid du Colombier void _memlsetclear(Memscreen*); 507dd7cddfSDavid du Colombier int memlorigin(Memimage*, Point, Point); 517dd7cddfSDavid du Colombier void memlnorefresh(Memimage*, Rectangle, void*); 52