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>
8 324891a5 2006-06-25 devnull * Pull i towards top of screen, just behind front
12 324891a5 2006-06-25 devnull _memltofront(Memimage *i, Memimage *front, int fill)
14 324891a5 2006-06-25 devnull Memlayer *l;
15 324891a5 2006-06-25 devnull Memscreen *s;
16 324891a5 2006-06-25 devnull Memimage *f, *ff, *rr;
17 324891a5 2006-06-25 devnull Rectangle x;
18 324891a5 2006-06-25 devnull int overlap;
20 324891a5 2006-06-25 devnull l = i->layer;
21 324891a5 2006-06-25 devnull s = l->screen;
22 324891a5 2006-06-25 devnull while(l->front != front){
23 324891a5 2006-06-25 devnull f = l->front;
24 324891a5 2006-06-25 devnull x = l->screenr;
25 324891a5 2006-06-25 devnull overlap = rectclip(&x, f->layer->screenr);
26 324891a5 2006-06-25 devnull if(overlap){
27 324891a5 2006-06-25 devnull memlhide(f, x);
28 324891a5 2006-06-25 devnull f->layer->clear = 0;
30 324891a5 2006-06-25 devnull /* swap l and f in screen's list */
31 324891a5 2006-06-25 devnull ff = f->layer->front;
32 324891a5 2006-06-25 devnull rr = l->rear;
33 324891a5 2006-06-25 devnull if(ff == nil)
34 324891a5 2006-06-25 devnull s->frontmost = i;
36 324891a5 2006-06-25 devnull ff->layer->rear = i;
37 324891a5 2006-06-25 devnull if(rr == nil)
38 324891a5 2006-06-25 devnull s->rearmost = f;
40 324891a5 2006-06-25 devnull rr->layer->front = f;
41 324891a5 2006-06-25 devnull l->front = ff;
42 324891a5 2006-06-25 devnull l->rear = f;
43 324891a5 2006-06-25 devnull f->layer->front = i;
44 324891a5 2006-06-25 devnull f->layer->rear = rr;
45 324891a5 2006-06-25 devnull if(overlap && fill)
46 324891a5 2006-06-25 devnull memlexpose(i, x);
51 324891a5 2006-06-25 devnull _memltofrontfill(Memimage *i, int fill)
53 324891a5 2006-06-25 devnull _memltofront(i, nil, fill);
54 324891a5 2006-06-25 devnull _memlsetclear(i->layer->screen);
58 324891a5 2006-06-25 devnull memltofront(Memimage *i)
60 324891a5 2006-06-25 devnull _memltofront(i, nil, 1);
61 324891a5 2006-06-25 devnull _memlsetclear(i->layer->screen);
65 324891a5 2006-06-25 devnull memltofrontn(Memimage **ip, int n)
67 324891a5 2006-06-25 devnull Memimage *i, *front;
68 324891a5 2006-06-25 devnull Memscreen *s;
70 324891a5 2006-06-25 devnull if(n == 0)
72 324891a5 2006-06-25 devnull front = nil;
73 324891a5 2006-06-25 devnull while(--n >= 0){
74 324891a5 2006-06-25 devnull i = *ip++;
75 324891a5 2006-06-25 devnull _memltofront(i, front, 1);
76 324891a5 2006-06-25 devnull front = i;
78 324891a5 2006-06-25 devnull s = front->layer->screen;
79 324891a5 2006-06-25 devnull _memlsetclear(s);