lsetrefresh.c 688 B

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