]> git.lizzy.rs Git - plan9front.git/blob - sys/src/libmemlayer/ldelete.c
merge
[plan9front.git] / sys / src / libmemlayer / ldelete.c
1 #include <u.h>
2 #include <libc.h>
3 #include <draw.h>
4 #include <memdraw.h>
5 #include <memlayer.h>
6
7 void
8 memldelete(Memimage *i)
9 {
10         Memscreen *s;
11         Memlayer *l;
12
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);
19
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 }
36
37 /*
38  * Just free the data structures, don't do graphics
39  */
40 void
41 memlfree(Memimage *i)
42 {
43         Memlayer *l;
44
45         l = i->layer;
46         freememimage(l->save);
47         free(l);
48         freememimage(i);
49 }
50
51 void
52 _memlsetclear(Memscreen *s)
53 {
54         Memimage *i, *j;
55         Memlayer *l;
56
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 }