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 memldelete(Memimage *i)
9 324891a5 2006-06-25 devnull {
10 324891a5 2006-06-25 devnull Memscreen *s;
11 324891a5 2006-06-25 devnull Memlayer *l;
12 324891a5 2006-06-25 devnull
13 324891a5 2006-06-25 devnull l = i->layer;
14 324891a5 2006-06-25 devnull /* free backing store and disconnect refresh, to make pushback fast */
15 324891a5 2006-06-25 devnull freememimage(l->save);
16 324891a5 2006-06-25 devnull l->save = nil;
17 324891a5 2006-06-25 devnull l->refreshptr = nil;
18 324891a5 2006-06-25 devnull memltorear(i);
19 324891a5 2006-06-25 devnull
20 324891a5 2006-06-25 devnull /* window is now the rearmost; clean up screen structures and deallocate */
21 324891a5 2006-06-25 devnull s = i->layer->screen;
22 324891a5 2006-06-25 devnull if(s->fill){
23 324891a5 2006-06-25 devnull i->clipr = i->r;
24 324891a5 2006-06-25 devnull memdraw(i, i->r, s->fill, i->r.min, nil, i->r.min, S);
25 324891a5 2006-06-25 devnull }
26 324891a5 2006-06-25 devnull if(l->front){
27 324891a5 2006-06-25 devnull l->front->layer->rear = nil;
28 324891a5 2006-06-25 devnull s->rearmost = l->front;
29 324891a5 2006-06-25 devnull }else{
30 324891a5 2006-06-25 devnull s->frontmost = nil;
31 324891a5 2006-06-25 devnull s->rearmost = nil;
32 324891a5 2006-06-25 devnull }
33 324891a5 2006-06-25 devnull free(l);
34 324891a5 2006-06-25 devnull freememimage(i);
35 324891a5 2006-06-25 devnull }
36 324891a5 2006-06-25 devnull
37 324891a5 2006-06-25 devnull /*
38 324891a5 2006-06-25 devnull * Just free the data structures, don't do graphics
39 324891a5 2006-06-25 devnull */
40 324891a5 2006-06-25 devnull void
41 324891a5 2006-06-25 devnull memlfree(Memimage *i)
42 324891a5 2006-06-25 devnull {
43 324891a5 2006-06-25 devnull Memlayer *l;
44 324891a5 2006-06-25 devnull
45 324891a5 2006-06-25 devnull l = i->layer;
46 324891a5 2006-06-25 devnull freememimage(l->save);
47 324891a5 2006-06-25 devnull free(l);
48 324891a5 2006-06-25 devnull freememimage(i);
49 324891a5 2006-06-25 devnull }
50 324891a5 2006-06-25 devnull
51 324891a5 2006-06-25 devnull void
52 324891a5 2006-06-25 devnull _memlsetclear(Memscreen *s)
53 324891a5 2006-06-25 devnull {
54 324891a5 2006-06-25 devnull Memimage *i, *j;
55 324891a5 2006-06-25 devnull Memlayer *l;
56 324891a5 2006-06-25 devnull
57 324891a5 2006-06-25 devnull for(i=s->rearmost; i; i=i->layer->front){
58 324891a5 2006-06-25 devnull l = i->layer;
59 324891a5 2006-06-25 devnull l->clear = rectinrect(l->screenr, l->screen->image->clipr);
60 324891a5 2006-06-25 devnull if(l->clear)
61 324891a5 2006-06-25 devnull for(j=l->front; j; j=j->layer->front)
62 324891a5 2006-06-25 devnull if(rectXrect(l->screenr, j->layer->screenr)){
63 324891a5 2006-06-25 devnull l->clear = 0;
64 324891a5 2006-06-25 devnull break;
65 324891a5 2006-06-25 devnull }
66 324891a5 2006-06-25 devnull }
67 324891a5 2006-06-25 devnull }