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