123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157 |
- void
- tatami(Monitor *m) {
- unsigned int i, n, nx, ny, nw, nh,
- mats, tc,
- tnx, tny, tnw, tnh;
- Client *c;
- for(n = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), ++n);
- if(n == 0)
- return;
-
- nx = m->wx;
- ny = 0;
- nw = m->ww;
- nh = m->wh;
-
- c = nexttiled(m->clients);
-
- if(n != 1) nw = m->ww * m->mfact;
- ny = m->wy;
-
- resize(c, nx, ny, nw - 2 * c->bw, nh - 2 * c->bw, False);
-
- c = nexttiled(c->next);
-
- nx += nw;
- nw = m->ww - nw;
-
- if(n>1)
- {
-
- tc = n-1;
- mats = tc/5;
-
- nh/=(mats + (tc % 5 > 0));
-
- for(i = 0; c && (i < (tc % 5)); c = nexttiled(c->next))
- {
- tnw=nw;
- tnx=nx;
- tnh=nh;
- tny=ny;
- switch(tc - (mats*5))
- {
- case 1://fill
- break;
- case 2://up and down
- if((i % 5) == 0) //up
- tnh/=2;
- else if((i % 5) == 1) //down
- {
- tnh/=2;
- tny += nh/2;
- }
- break;
- case 3://bottom, up-left and up-right
- if((i % 5) == 0) //up-left
- {
- tnw = nw/2;
- tnh = (2*nh)/3;
- }
- else if((i % 5) == 1)//up-right
- {
- tnx += nw/2;
- tnw = nw/2;
- tnh = (2*nh)/3;
- }
- else if((i % 5) == 2)//bottom
- {
- tnh = nh/3;
- tny += (2*nh)/3;
- }
- break;
- case 4://bottom, left, right and top
- if((i % 5) == 0) //top
- {
- tnh = (nh)/4;
- }
- else if((i % 5) == 1)//left
- {
- tnw = nw/2;
- tny += nh/4;
- tnh = (nh)/2;
- }
- else if((i % 5) == 2)//right
- {
- tnx += nw/2;
- tnw = nw/2;
- tny += nh/4;
- tnh = (nh)/2;
- }
- else if((i % 5) == 3)//bottom
- {
- tny += (3*nh)/4;
- tnh = (nh)/4;
- }
- break;
- }
- ++i;
- resize(c, tnx, tny, tnw - 2 * c->bw, tnh - 2 * c->bw, False);
- }
-
- ++mats;
-
- for(i = 0; c && (mats>0); c = nexttiled(c->next)) {
- if((i%5)==0)
- {
- --mats;
- if(((tc % 5) > 0)||(i>=5))
- ny+=nh;
- }
-
- tnw=nw;
- tnx=nx;
- tnh=nh;
- tny=ny;
-
- switch(i % 5)
- {
- case 0: //top-left-vert
- tnw = (nw)/3;
- tnh = (nh*2)/3;
- break;
- case 1: //top-right-hor
- tnx += (nw)/3;
- tnw = (nw*2)/3;
- tnh = (nh)/3;
- break;
- case 2: //center
- tnx += (nw)/3;
- tnw = (nw)/3;
- tny += (nh)/3;
- tnh = (nh)/3;
- break;
- case 3: //bottom-right-vert
- tnx += (nw*2)/3;
- tnw = (nw)/3;
- tny += (nh)/3;
- tnh = (nh*2)/3;
- break;
- case 4: //(oldest) bottom-left-hor
- tnw = (2*nw)/3;
- tny += (2*nh)/3;
- tnh = (nh)/3;
- break;
- default:
- break;
- }
-
- ++i;
- //i%=5;
- resize(c, tnx, tny, tnw - 2 * c->bw, tnh - 2 * c->bw, False);
- }
- }
- }
|