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 /*
8 76193d7c 2003-09-30 devnull * Pull i towards top of screen, just behind front
9 76193d7c 2003-09-30 devnull */
10 76193d7c 2003-09-30 devnull static
11 76193d7c 2003-09-30 devnull void
12 76193d7c 2003-09-30 devnull _memltofront(Memimage *i, Memimage *front, int fill)
13 76193d7c 2003-09-30 devnull {
14 76193d7c 2003-09-30 devnull Memlayer *l;
15 76193d7c 2003-09-30 devnull Memscreen *s;
16 76193d7c 2003-09-30 devnull Memimage *f, *ff, *rr;
17 76193d7c 2003-09-30 devnull Rectangle x;
18 76193d7c 2003-09-30 devnull int overlap;
19 76193d7c 2003-09-30 devnull
20 76193d7c 2003-09-30 devnull l = i->layer;
21 76193d7c 2003-09-30 devnull s = l->screen;
22 76193d7c 2003-09-30 devnull while(l->front != front){
23 76193d7c 2003-09-30 devnull f = l->front;
24 76193d7c 2003-09-30 devnull x = l->screenr;
25 76193d7c 2003-09-30 devnull overlap = rectclip(&x, f->layer->screenr);
26 76193d7c 2003-09-30 devnull if(overlap){
27 76193d7c 2003-09-30 devnull memlhide(f, x);
28 76193d7c 2003-09-30 devnull f->layer->clear = 0;
29 76193d7c 2003-09-30 devnull }
30 76193d7c 2003-09-30 devnull /* swap l and f in screen's list */
31 76193d7c 2003-09-30 devnull ff = f->layer->front;
32 76193d7c 2003-09-30 devnull rr = l->rear;
33 76193d7c 2003-09-30 devnull if(ff == nil)
34 76193d7c 2003-09-30 devnull s->frontmost = i;
35 76193d7c 2003-09-30 devnull else
36 76193d7c 2003-09-30 devnull ff->layer->rear = i;
37 76193d7c 2003-09-30 devnull if(rr == nil)
38 76193d7c 2003-09-30 devnull s->rearmost = f;
39 76193d7c 2003-09-30 devnull else
40 76193d7c 2003-09-30 devnull rr->layer->front = f;
41 76193d7c 2003-09-30 devnull l->front = ff;
42 76193d7c 2003-09-30 devnull l->rear = f;
43 76193d7c 2003-09-30 devnull f->layer->front = i;
44 76193d7c 2003-09-30 devnull f->layer->rear = rr;
45 76193d7c 2003-09-30 devnull if(overlap && fill)
46 76193d7c 2003-09-30 devnull memlexpose(i, x);
47 76193d7c 2003-09-30 devnull }
48 76193d7c 2003-09-30 devnull }
49 76193d7c 2003-09-30 devnull
50 76193d7c 2003-09-30 devnull void
51 76193d7c 2003-09-30 devnull _memltofrontfill(Memimage *i, int fill)
52 76193d7c 2003-09-30 devnull {
53 76193d7c 2003-09-30 devnull _memltofront(i, nil, fill);
54 76193d7c 2003-09-30 devnull _memlsetclear(i->layer->screen);
55 76193d7c 2003-09-30 devnull }
56 76193d7c 2003-09-30 devnull
57 76193d7c 2003-09-30 devnull void
58 76193d7c 2003-09-30 devnull memltofront(Memimage *i)
59 76193d7c 2003-09-30 devnull {
60 76193d7c 2003-09-30 devnull _memltofront(i, nil, 1);
61 76193d7c 2003-09-30 devnull _memlsetclear(i->layer->screen);
62 76193d7c 2003-09-30 devnull }
63 76193d7c 2003-09-30 devnull
64 76193d7c 2003-09-30 devnull void
65 76193d7c 2003-09-30 devnull memltofrontn(Memimage **ip, int n)
66 76193d7c 2003-09-30 devnull {
67 76193d7c 2003-09-30 devnull Memimage *i, *front;
68 76193d7c 2003-09-30 devnull Memscreen *s;
69 76193d7c 2003-09-30 devnull
70 76193d7c 2003-09-30 devnull if(n == 0)
71 76193d7c 2003-09-30 devnull return;
72 76193d7c 2003-09-30 devnull front = nil;
73 76193d7c 2003-09-30 devnull while(--n >= 0){
74 76193d7c 2003-09-30 devnull i = *ip++;
75 76193d7c 2003-09-30 devnull _memltofront(i, front, 1);
76 76193d7c 2003-09-30 devnull front = i;
77 76193d7c 2003-09-30 devnull }
78 76193d7c 2003-09-30 devnull s = front->layer->screen;
79 76193d7c 2003-09-30 devnull _memlsetclear(s);
80 76193d7c 2003-09-30 devnull }