Blame


1 324891a5 2006-06-25 devnull #include <u.h>
2 324891a5 2006-06-25 devnull #include <libc.h>
3 324891a5 2006-06-25 devnull #include <draw.h>
4 324891a5 2006-06-25 devnull #include <memdraw.h>
5 324891a5 2006-06-25 devnull #include <memlayer.h>
6 324891a5 2006-06-25 devnull
7 324891a5 2006-06-25 devnull int
8 324891a5 2006-06-25 devnull memlsetrefresh(Memimage *i, Refreshfn fn, void *ptr)
9 324891a5 2006-06-25 devnull {
10 324891a5 2006-06-25 devnull Memlayer *l;
11 324891a5 2006-06-25 devnull
12 324891a5 2006-06-25 devnull l = i->layer;
13 324891a5 2006-06-25 devnull if(l->refreshfn!=0 && fn!=0){ /* just change functions */
14 324891a5 2006-06-25 devnull l->refreshfn = fn;
15 324891a5 2006-06-25 devnull l->refreshptr = ptr;
16 324891a5 2006-06-25 devnull return 1;
17 324891a5 2006-06-25 devnull }
18 324891a5 2006-06-25 devnull
19 324891a5 2006-06-25 devnull if(l->refreshfn == 0){ /* is using backup image; just free it */
20 324891a5 2006-06-25 devnull freememimage(l->save);
21 324891a5 2006-06-25 devnull l->save = nil;
22 324891a5 2006-06-25 devnull l->refreshfn = fn;
23 324891a5 2006-06-25 devnull l->refreshptr = ptr;
24 324891a5 2006-06-25 devnull return 1;
25 324891a5 2006-06-25 devnull }
26 324891a5 2006-06-25 devnull
27 324891a5 2006-06-25 devnull l->save = allocmemimage(i->r, i->chan);
28 324891a5 2006-06-25 devnull if(l->save == nil)
29 324891a5 2006-06-25 devnull return 0;
30 324891a5 2006-06-25 devnull /* easiest way is just to update the entire save area */
31 324891a5 2006-06-25 devnull l->refreshfn(i, i->r, l->refreshptr);
32 324891a5 2006-06-25 devnull l->refreshfn = 0;
33 324891a5 2006-06-25 devnull l->refreshptr = nil;
34 324891a5 2006-06-25 devnull return 1;
35 324891a5 2006-06-25 devnull }