Charles.Forsyth20060303a828770d19 years agoHistory
80 lines · 1.3 KB · C
RawDownload
#include "lib9.h"#include "draw.h"#include "memdraw.h"#include "memlayer.h"#include "pool.h" /* * Pull i towards top of screen, just behind front*/staticvoid_memltofront(Memimage *i, Memimage *front, int fill){	Memlayer *l;	Memscreen *s;	Memimage *f, *ff, *rr;	Rectangle x;	int overlap; 	l = i->layer;	s = l->screen;	while(l->front != front){		f = l->front;		x = l->screenr;		overlap = rectclip(&x, f->layer->screenr);		if(overlap){			memlhide(f, x);			f->layer->clear = 0;		}		/* swap l and f in screen's list */		ff = f->layer->front;		rr = l->rear;		if(ff == nil)			s->frontmost = i;		else			ff->layer->rear = i;		if(rr == nil)			s->rearmost = f;		else			rr->layer->front = f;		l->front = ff;		l->rear = f;		f->layer->front = i;		f->layer->rear = rr;		if(overlap && fill)			memlexpose(i, x);	}} void_memltofrontfill(Memimage *i, int fill){	_memltofront(i, nil, fill);	_memlsetclear(i->layer->screen);} voidmemltofront(Memimage *i){	_memltofront(i, nil, 1);	_memlsetclear(i->layer->screen);} voidmemltofrontn(Memimage **ip, int n){	Memimage *i, *front;	Memscreen *s; 	if(n == 0)		return;	front = nil;	while(--n >= 0){		i = *ip++;		_memltofront(i, front, 1);		front = i;	}	s = front->layer->screen;	_memlsetclear(s);}