Blame


1 76193d7c 2003-09-30 devnull #include <u.h>
2 76193d7c 2003-09-30 devnull #include <libc.h>
3 76193d7c 2003-09-30 devnull #include <draw.h>
4 76193d7c 2003-09-30 devnull #include <memdraw.h>
5 76193d7c 2003-09-30 devnull #include <memlayer.h>
6 76193d7c 2003-09-30 devnull
7 76193d7c 2003-09-30 devnull void
8 76193d7c 2003-09-30 devnull _memltorear(Memimage *i, Memimage *rear)
9 76193d7c 2003-09-30 devnull {
10 76193d7c 2003-09-30 devnull Memlayer *l;
11 76193d7c 2003-09-30 devnull Memscreen *s;
12 76193d7c 2003-09-30 devnull Memimage *f, *r, *rr;
13 76193d7c 2003-09-30 devnull Rectangle x;
14 76193d7c 2003-09-30 devnull int overlap;
15 76193d7c 2003-09-30 devnull
16 76193d7c 2003-09-30 devnull l = i->layer;
17 76193d7c 2003-09-30 devnull s = l->screen;
18 76193d7c 2003-09-30 devnull while(l->rear != rear){
19 76193d7c 2003-09-30 devnull r = l->rear;
20 76193d7c 2003-09-30 devnull x = l->screenr;
21 76193d7c 2003-09-30 devnull overlap = rectclip(&x, r->layer->screenr);
22 76193d7c 2003-09-30 devnull if(overlap){
23 76193d7c 2003-09-30 devnull memlhide(i, x);
24 76193d7c 2003-09-30 devnull l->clear = 0;
25 76193d7c 2003-09-30 devnull }
26 76193d7c 2003-09-30 devnull /* swap l and r in screen's list */
27 76193d7c 2003-09-30 devnull rr = r->layer->rear;
28 76193d7c 2003-09-30 devnull f = l->front;
29 76193d7c 2003-09-30 devnull if(rr == nil)
30 76193d7c 2003-09-30 devnull s->rearmost = i;
31 76193d7c 2003-09-30 devnull else
32 76193d7c 2003-09-30 devnull rr->layer->front = i;
33 76193d7c 2003-09-30 devnull if(f == nil)
34 76193d7c 2003-09-30 devnull s->frontmost = r;
35 76193d7c 2003-09-30 devnull else
36 76193d7c 2003-09-30 devnull f->layer->rear = r;
37 76193d7c 2003-09-30 devnull l->rear = rr;
38 76193d7c 2003-09-30 devnull l->front = r;
39 76193d7c 2003-09-30 devnull r->layer->rear = i;
40 76193d7c 2003-09-30 devnull r->layer->front = f;
41 76193d7c 2003-09-30 devnull if(overlap)
42 76193d7c 2003-09-30 devnull memlexpose(r, x);
43 76193d7c 2003-09-30 devnull }
44 76193d7c 2003-09-30 devnull }
45 76193d7c 2003-09-30 devnull
46 76193d7c 2003-09-30 devnull void
47 76193d7c 2003-09-30 devnull memltorear(Memimage *i)
48 76193d7c 2003-09-30 devnull {
49 76193d7c 2003-09-30 devnull _memltorear(i, nil);
50 76193d7c 2003-09-30 devnull _memlsetclear(i->layer->screen);
51 76193d7c 2003-09-30 devnull }
52 76193d7c 2003-09-30 devnull
53 76193d7c 2003-09-30 devnull void
54 76193d7c 2003-09-30 devnull memltorearn(Memimage **ip, int n)
55 76193d7c 2003-09-30 devnull {
56 76193d7c 2003-09-30 devnull Memimage *i, *rear;
57 76193d7c 2003-09-30 devnull Memscreen *s;
58 76193d7c 2003-09-30 devnull
59 76193d7c 2003-09-30 devnull if(n == 0)
60 76193d7c 2003-09-30 devnull return;
61 76193d7c 2003-09-30 devnull rear = nil;
62 76193d7c 2003-09-30 devnull while(--n >= 0){
63 76193d7c 2003-09-30 devnull i = *ip++;
64 76193d7c 2003-09-30 devnull _memltorear(i, rear);
65 76193d7c 2003-09-30 devnull rear = i;
66 76193d7c 2003-09-30 devnull }
67 76193d7c 2003-09-30 devnull s = rear->layer->screen;
68 76193d7c 2003-09-30 devnull _memlsetclear(s);
69 76193d7c 2003-09-30 devnull }