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 _memltorear(Memimage *i, Memimage *rear) 9*7dd7cddfSDavid du Colombier { 10*7dd7cddfSDavid du Colombier Memlayer *l; 11*7dd7cddfSDavid du Colombier Memscreen *s; 12*7dd7cddfSDavid du Colombier Memimage *f, *r, *rr; 13*7dd7cddfSDavid du Colombier Rectangle x; 14*7dd7cddfSDavid du Colombier int overlap; 15*7dd7cddfSDavid du Colombier 16*7dd7cddfSDavid du Colombier l = i->layer; 17*7dd7cddfSDavid du Colombier s = l->screen; 18*7dd7cddfSDavid du Colombier while(l->rear != rear){ 19*7dd7cddfSDavid du Colombier r = l->rear; 20*7dd7cddfSDavid du Colombier x = l->screenr; 21*7dd7cddfSDavid du Colombier overlap = rectclip(&x, r->layer->screenr); 22*7dd7cddfSDavid du Colombier if(overlap){ 23*7dd7cddfSDavid du Colombier memlhide(i, x); 24*7dd7cddfSDavid du Colombier l->clear = 0; 25*7dd7cddfSDavid du Colombier } 26*7dd7cddfSDavid du Colombier /* swap l and r in screen's list */ 27*7dd7cddfSDavid du Colombier rr = r->layer->rear; 28*7dd7cddfSDavid du Colombier f = l->front; 29*7dd7cddfSDavid du Colombier if(rr == nil) 30*7dd7cddfSDavid du Colombier s->rearmost = i; 31*7dd7cddfSDavid du Colombier else 32*7dd7cddfSDavid du Colombier rr->layer->front = i; 33*7dd7cddfSDavid du Colombier if(f == nil) 34*7dd7cddfSDavid du Colombier s->frontmost = r; 35*7dd7cddfSDavid du Colombier else 36*7dd7cddfSDavid du Colombier f->layer->rear = r; 37*7dd7cddfSDavid du Colombier l->rear = rr; 38*7dd7cddfSDavid du Colombier l->front = r; 39*7dd7cddfSDavid du Colombier r->layer->rear = i; 40*7dd7cddfSDavid du Colombier r->layer->front = f; 41*7dd7cddfSDavid du Colombier if(overlap) 42*7dd7cddfSDavid du Colombier memlexpose(r, x); 43*7dd7cddfSDavid du Colombier } 44*7dd7cddfSDavid du Colombier } 45*7dd7cddfSDavid du Colombier 46*7dd7cddfSDavid du Colombier void 47*7dd7cddfSDavid du Colombier memltorear(Memimage *i) 48*7dd7cddfSDavid du Colombier { 49*7dd7cddfSDavid du Colombier _memltorear(i, nil); 50*7dd7cddfSDavid du Colombier memlsetclear(i->layer->screen); 51*7dd7cddfSDavid du Colombier } 52*7dd7cddfSDavid du Colombier 53*7dd7cddfSDavid du Colombier void 54*7dd7cddfSDavid du Colombier memltorearn(Memimage **ip, int n) 55*7dd7cddfSDavid du Colombier { 56*7dd7cddfSDavid du Colombier Memimage *i, *rear; 57*7dd7cddfSDavid du Colombier Memscreen *s; 58*7dd7cddfSDavid du Colombier 59*7dd7cddfSDavid du Colombier if(n == 0) 60*7dd7cddfSDavid du Colombier return; 61*7dd7cddfSDavid du Colombier rear = nil; 62*7dd7cddfSDavid du Colombier while(--n >= 0){ 63*7dd7cddfSDavid du Colombier i = *ip++; 64*7dd7cddfSDavid du Colombier _memltorear(i, rear); 65*7dd7cddfSDavid du Colombier rear = i; 66*7dd7cddfSDavid du Colombier } 67*7dd7cddfSDavid du Colombier s = rear->layer->screen; 68*7dd7cddfSDavid du Colombier memlsetclear(s); 69*7dd7cddfSDavid du Colombier } 70