lsetrefresh.c 703 B

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