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