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