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