diff options
author | rsc <devnull@localhost> | 2006-06-25 18:58:06 +0000 |
---|---|---|
committer | rsc <devnull@localhost> | 2006-06-25 18:58:06 +0000 |
commit | 324891a5579d6f504201a6107369c64dab245a98 (patch) | |
tree | 3069429c14484b100d86dd5a3b1013565bf5db6c /src/libmemlayer/ldelete.c | |
parent | 9361131304f39db29b1bec59d881e585035ec93c (diff) | |
download | plan9port-324891a5579d6f504201a6107369c64dab245a98.tar.gz plan9port-324891a5579d6f504201a6107369c64dab245a98.tar.bz2 plan9port-324891a5579d6f504201a6107369c64dab245a98.zip |
separate out
Diffstat (limited to 'src/libmemlayer/ldelete.c')
-rw-r--r-- | src/libmemlayer/ldelete.c | 67 |
1 files changed, 67 insertions, 0 deletions
diff --git a/src/libmemlayer/ldelete.c b/src/libmemlayer/ldelete.c new file mode 100644 index 00000000..34cd6ead --- /dev/null +++ b/src/libmemlayer/ldelete.c @@ -0,0 +1,67 @@ +#include <u.h> +#include <libc.h> +#include <draw.h> +#include <memdraw.h> +#include <memlayer.h> + +void +memldelete(Memimage *i) +{ + Memscreen *s; + Memlayer *l; + + l = i->layer; + /* free backing store and disconnect refresh, to make pushback fast */ + freememimage(l->save); + l->save = nil; + l->refreshptr = nil; + memltorear(i); + + /* window is now the rearmost; clean up screen structures and deallocate */ + s = i->layer->screen; + if(s->fill){ + i->clipr = i->r; + memdraw(i, i->r, s->fill, i->r.min, nil, i->r.min, S); + } + if(l->front){ + l->front->layer->rear = nil; + s->rearmost = l->front; + }else{ + s->frontmost = nil; + s->rearmost = nil; + } + free(l); + freememimage(i); +} + +/* + * Just free the data structures, don't do graphics + */ +void +memlfree(Memimage *i) +{ + Memlayer *l; + + l = i->layer; + freememimage(l->save); + free(l); + freememimage(i); +} + +void +_memlsetclear(Memscreen *s) +{ + Memimage *i, *j; + Memlayer *l; + + for(i=s->rearmost; i; i=i->layer->front){ + l = i->layer; + l->clear = rectinrect(l->screenr, l->screen->image->clipr); + if(l->clear) + for(j=l->front; j; j=j->layer->front) + if(rectXrect(l->screenr, j->layer->screenr)){ + l->clear = 0; + break; + } + } +} |