18ccd4a63SDavid du Colombier #include <u.h> 28ccd4a63SDavid du Colombier #include <libc.h> 38ccd4a63SDavid du Colombier #include <draw.h> 48ccd4a63SDavid du Colombier #include <memdraw.h> 58ccd4a63SDavid du Colombier #include <memlayer.h> 67dd7cddfSDavid du Colombier 77dd7cddfSDavid du Colombier int memlsetrefresh(Memimage * i,Refreshfn fn,void * ptr)87dd7cddfSDavid du Colombiermemlsetrefresh(Memimage *i, Refreshfn fn, void *ptr) 97dd7cddfSDavid du Colombier { 107dd7cddfSDavid du Colombier Memlayer *l; 117dd7cddfSDavid du Colombier 127dd7cddfSDavid du Colombier l = i->layer; 13*ec59a3ddSDavid du Colombier if(l->refreshfn!=0 && fn!=0){ /* just change functions */ 147dd7cddfSDavid du Colombier l->refreshfn = fn; 157dd7cddfSDavid du Colombier l->refreshptr = ptr; 167dd7cddfSDavid du Colombier return 1; 177dd7cddfSDavid du Colombier } 187dd7cddfSDavid du Colombier 19*ec59a3ddSDavid du Colombier if(l->refreshfn == 0){ /* is using backup image; just free it */ 207dd7cddfSDavid du Colombier freememimage(l->save); 217dd7cddfSDavid du Colombier l->save = nil; 227dd7cddfSDavid du Colombier l->refreshfn = fn; 237dd7cddfSDavid du Colombier l->refreshptr = ptr; 247dd7cddfSDavid du Colombier return 1; 257dd7cddfSDavid du Colombier } 267dd7cddfSDavid du Colombier 277dd7cddfSDavid du Colombier l->save = allocmemimage(i->r, i->chan); 287dd7cddfSDavid du Colombier if(l->save == nil) 297dd7cddfSDavid du Colombier return 0; 307dd7cddfSDavid du Colombier /* easiest way is just to update the entire save area */ 317dd7cddfSDavid du Colombier l->refreshfn(i, i->r, l->refreshptr); 32*ec59a3ddSDavid du Colombier l->refreshfn = 0; 337dd7cddfSDavid du Colombier l->refreshptr = nil; 347dd7cddfSDavid du Colombier return 1; 357dd7cddfSDavid du Colombier } 36