Blame


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