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