Blob


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