2 |
- |
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*);
|