diff options
| author | rsc <devnull@localhost> | 2003-09-30 17:47:42 +0000 |
|---|---|---|
| committer | rsc <devnull@localhost> | 2003-09-30 17:47:42 +0000 |
| commit | 76193d7cb0457807b2f0b95f909ab5de19480cd7 (patch) | |
| tree | 97e538c7e38181431e90289a0fe8b6b7ce1f8f3c /src/libdraw/ml-ltorear.c | |
| parent | ed7c8e8d02c02bdbff1e88a6d8d1419f39af48ad (diff) | |
| download | plan9port-76193d7cb0457807b2f0b95f909ab5de19480cd7.tar.gz plan9port-76193d7cb0457807b2f0b95f909ab5de19480cd7.zip | |
Initial revision
Diffstat (limited to 'src/libdraw/ml-ltorear.c')
| -rw-r--r-- | src/libdraw/ml-ltorear.c | 69 |
1 files changed, 69 insertions, 0 deletions
diff --git a/src/libdraw/ml-ltorear.c b/src/libdraw/ml-ltorear.c new file mode 100644 index 00000000..d53e8cc9 --- /dev/null +++ b/src/libdraw/ml-ltorear.c @@ -0,0 +1,69 @@ +#include <u.h> +#include <libc.h> +#include <draw.h> +#include <memdraw.h> +#include <memlayer.h> + +void +_memltorear(Memimage *i, Memimage *rear) +{ + Memlayer *l; + Memscreen *s; + Memimage *f, *r, *rr; + Rectangle x; + int overlap; + + l = i->layer; + s = l->screen; + while(l->rear != rear){ + r = l->rear; + x = l->screenr; + overlap = rectclip(&x, r->layer->screenr); + if(overlap){ + memlhide(i, x); + l->clear = 0; + } + /* swap l and r in screen's list */ + rr = r->layer->rear; + f = l->front; + if(rr == nil) + s->rearmost = i; + else + rr->layer->front = i; + if(f == nil) + s->frontmost = r; + else + f->layer->rear = r; + l->rear = rr; + l->front = r; + r->layer->rear = i; + r->layer->front = f; + if(overlap) + memlexpose(r, x); + } +} + +void +memltorear(Memimage *i) +{ + _memltorear(i, nil); + _memlsetclear(i->layer->screen); +} + +void +memltorearn(Memimage **ip, int n) +{ + Memimage *i, *rear; + Memscreen *s; + + if(n == 0) + return; + rear = nil; + while(--n >= 0){ + i = *ip++; + _memltorear(i, rear); + rear = i; + } + s = rear->layer->screen; + _memlsetclear(s); +} |
