tltofront.c - plan9port - [fork] Plan 9 from user space
 (HTM) git clone git://src.adamsgaard.dk/plan9port
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
       tltofront.c (1289B)
       ---
            1 #include <u.h>
            2 #include <libc.h>
            3 #include <draw.h>
            4 #include <memdraw.h>
            5 #include <memlayer.h>
            6 
            7 /*
            8  * Pull i towards top of screen, just behind front
            9 */
           10 static
           11 void
           12 _memltofront(Memimage *i, Memimage *front, int fill)
           13 {
           14         Memlayer *l;
           15         Memscreen *s;
           16         Memimage *f, *ff, *rr;
           17         Rectangle x;
           18         int overlap;
           19 
           20         l = i->layer;
           21         s = l->screen;
           22         while(l->front != front){
           23                 f = l->front;
           24                 x = l->screenr;
           25                 overlap = rectclip(&x, f->layer->screenr);
           26                 if(overlap){
           27                         memlhide(f, x);
           28                         f->layer->clear = 0;
           29                 }
           30                 /* swap l and f in screen's list */
           31                 ff = f->layer->front;
           32                 rr = l->rear;
           33                 if(ff == nil)
           34                         s->frontmost = i;
           35                 else
           36                         ff->layer->rear = i;
           37                 if(rr == nil)
           38                         s->rearmost = f;
           39                 else
           40                         rr->layer->front = f;
           41                 l->front = ff;
           42                 l->rear = f;
           43                 f->layer->front = i;
           44                 f->layer->rear = rr;
           45                 if(overlap && fill)
           46                         memlexpose(i, x);
           47         }
           48 }
           49 
           50 void
           51 _memltofrontfill(Memimage *i, int fill)
           52 {
           53         _memltofront(i, nil, fill);
           54         _memlsetclear(i->layer->screen);
           55 }
           56 
           57 void
           58 memltofront(Memimage *i)
           59 {
           60         _memltofront(i, nil, 1);
           61         _memlsetclear(i->layer->screen);
           62 }
           63 
           64 void
           65 memltofrontn(Memimage **ip, int n)
           66 {
           67         Memimage *i, *front;
           68         Memscreen *s;
           69 
           70         if(n == 0)
           71                 return;
           72         front = nil;
           73         while(--n >= 0){
           74                 i = *ip++;
           75                 _memltofront(i, front, 1);
           76                 front = i;
           77         }
           78         s = front->layer->screen;
           79         _memlsetclear(s);
           80 }