Subversion Repositories planix.SVN

Rev

Details | Last modification | View Log | RSS feed

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