1*8ccd4a63SDavid du Colombier #include <u.h>
2*8ccd4a63SDavid du Colombier #include <libc.h>
3*8ccd4a63SDavid du Colombier #include <draw.h>
4*8ccd4a63SDavid du Colombier #include <memdraw.h>
5*8ccd4a63SDavid du Colombier #include <memlayer.h>
67dd7cddfSDavid du Colombier
77dd7cddfSDavid du Colombier void
memldelete(Memimage * i)87dd7cddfSDavid du Colombier memldelete(Memimage *i)
97dd7cddfSDavid du Colombier {
107dd7cddfSDavid du Colombier Memscreen *s;
117dd7cddfSDavid du Colombier Memlayer *l;
127dd7cddfSDavid du Colombier
137dd7cddfSDavid du Colombier l = i->layer;
147dd7cddfSDavid du Colombier /* free backing store and disconnect refresh, to make pushback fast */
157dd7cddfSDavid du Colombier freememimage(l->save);
167dd7cddfSDavid du Colombier l->save = nil;
177dd7cddfSDavid du Colombier l->refreshptr = nil;
187dd7cddfSDavid du Colombier memltorear(i);
197dd7cddfSDavid du Colombier
207dd7cddfSDavid du Colombier /* window is now the rearmost; clean up screen structures and deallocate */
217dd7cddfSDavid du Colombier s = i->layer->screen;
227dd7cddfSDavid du Colombier if(s->fill){
237dd7cddfSDavid du Colombier i->clipr = i->r;
24*8ccd4a63SDavid du Colombier memdraw(i, i->r, s->fill, i->r.min, nil, i->r.min, S);
257dd7cddfSDavid du Colombier }
267dd7cddfSDavid du Colombier if(l->front){
277dd7cddfSDavid du Colombier l->front->layer->rear = nil;
287dd7cddfSDavid du Colombier s->rearmost = l->front;
297dd7cddfSDavid du Colombier }else{
307dd7cddfSDavid du Colombier s->frontmost = nil;
317dd7cddfSDavid du Colombier s->rearmost = nil;
327dd7cddfSDavid du Colombier }
337dd7cddfSDavid du Colombier free(l);
347dd7cddfSDavid du Colombier freememimage(i);
357dd7cddfSDavid du Colombier }
367dd7cddfSDavid du Colombier
377dd7cddfSDavid du Colombier /*
387dd7cddfSDavid du Colombier * Just free the data structures, don't do graphics
397dd7cddfSDavid du Colombier */
407dd7cddfSDavid du Colombier void
memlfree(Memimage * i)417dd7cddfSDavid du Colombier memlfree(Memimage *i)
427dd7cddfSDavid du Colombier {
437dd7cddfSDavid du Colombier Memlayer *l;
447dd7cddfSDavid du Colombier
457dd7cddfSDavid du Colombier l = i->layer;
467dd7cddfSDavid du Colombier freememimage(l->save);
477dd7cddfSDavid du Colombier free(l);
487dd7cddfSDavid du Colombier freememimage(i);
497dd7cddfSDavid du Colombier }
507dd7cddfSDavid du Colombier
517dd7cddfSDavid du Colombier void
_memlsetclear(Memscreen * s)52*8ccd4a63SDavid du Colombier _memlsetclear(Memscreen *s)
537dd7cddfSDavid du Colombier {
547dd7cddfSDavid du Colombier Memimage *i, *j;
557dd7cddfSDavid du Colombier Memlayer *l;
567dd7cddfSDavid du Colombier
577dd7cddfSDavid du Colombier for(i=s->rearmost; i; i=i->layer->front){
587dd7cddfSDavid du Colombier l = i->layer;
597dd7cddfSDavid du Colombier l->clear = rectinrect(l->screenr, l->screen->image->clipr);
607dd7cddfSDavid du Colombier if(l->clear)
617dd7cddfSDavid du Colombier for(j=l->front; j; j=j->layer->front)
627dd7cddfSDavid du Colombier if(rectXrect(l->screenr, j->layer->screenr)){
637dd7cddfSDavid du Colombier l->clear = 0;
647dd7cddfSDavid du Colombier break;
657dd7cddfSDavid du Colombier }
667dd7cddfSDavid du Colombier }
677dd7cddfSDavid du Colombier }
68