|  | #include <u.h> | 
|  | #include <libc.h> | 
|  | #include <draw.h> | 
|  | #include <memdraw.h> | 
|  | #include <memlayer.h> | 
|  |  | 
|  | int | 
|  | memlsetrefresh(Memimage *i, Refreshfn fn, void *ptr) | 
|  | { | 
|  | Memlayer *l; | 
|  |  | 
|  | l = i->layer; | 
|  | if(l->refreshfn!=0 && fn!=0){	/* just change functions */ | 
|  | l->refreshfn = fn; | 
|  | l->refreshptr = ptr; | 
|  | return 1; | 
|  | } | 
|  |  | 
|  | if(l->refreshfn == 0){	/* is using backup image; just free it */ | 
|  | freememimage(l->save); | 
|  | l->save = nil; | 
|  | l->refreshfn = fn; | 
|  | l->refreshptr = ptr; | 
|  | return 1; | 
|  | } | 
|  |  | 
|  | l->save = allocmemimage(i->r, i->chan); | 
|  | if(l->save == nil) | 
|  | return 0; | 
|  | /* easiest way is just to update the entire save area */ | 
|  | l->refreshfn(i, i->r, l->refreshptr); | 
|  | l->refreshfn = 0; | 
|  | l->refreshptr = nil; | 
|  | return 1; | 
|  | } |