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