Blame


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