Warning: Attempt to read property "date" on null in /usr/local/www/websvn.planix.org/blame.php on line 247

Warning: Attempt to read property "msg" on null in /usr/local/www/websvn.planix.org/blame.php on line 247
WebSVN – planix.SVN – Blame – /os/branches/feature_unix/sys/src/libmemlayer/ltorear.c – Rev 2

Subversion Repositories planix.SVN

Rev

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