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