rsc | 76193d7 | 2003-09-30 17:47:42 +0000 | [diff] [blame] | 1 | #include <u.h> |
| 2 | #include <libc.h> |
| 3 | #include <draw.h> |
| 4 | #include <memdraw.h> |
| 5 | #include <memlayer.h> |
| 6 | |
| 7 | int |
| 8 | memlsetrefresh(Memimage *i, Refreshfn fn, void *ptr) |
| 9 | { |
| 10 | Memlayer *l; |
| 11 | |
| 12 | l = i->layer; |
wkj | a876386 | 2004-07-09 01:54:06 +0000 | [diff] [blame] | 13 | if(l->refreshfn!=0 && fn!=0){ /* just change functions */ |
rsc | 76193d7 | 2003-09-30 17:47:42 +0000 | [diff] [blame] | 14 | l->refreshfn = fn; |
| 15 | l->refreshptr = ptr; |
| 16 | return 1; |
| 17 | } |
| 18 | |
wkj | a876386 | 2004-07-09 01:54:06 +0000 | [diff] [blame] | 19 | if(l->refreshfn == 0){ /* is using backup image; just free it */ |
rsc | 76193d7 | 2003-09-30 17:47:42 +0000 | [diff] [blame] | 20 | freememimage(l->save); |
| 21 | l->save = nil; |
| 22 | l->refreshfn = fn; |
| 23 | l->refreshptr = ptr; |
| 24 | return 1; |
| 25 | } |
| 26 | |
| 27 | l->save = allocmemimage(i->r, i->chan); |
| 28 | if(l->save == nil) |
| 29 | return 0; |
| 30 | /* easiest way is just to update the entire save area */ |
| 31 | l->refreshfn(i, i->r, l->refreshptr); |
rsc | be22ae2 | 2004-03-26 01:59:35 +0000 | [diff] [blame] | 32 | l->refreshfn = 0; |
rsc | 76193d7 | 2003-09-30 17:47:42 +0000 | [diff] [blame] | 33 | l->refreshptr = nil; |
| 34 | return 1; |
| 35 | } |