layout.c
changeset 898 6c8b43d7b616
parent 892 42bf8e618d52
child 901 8f6f61e07567
equal deleted inserted replaced
897:0a78c9e46e24 898:6c8b43d7b616
    13 static unsigned int masterw = MASTERWIDTH;
    13 static unsigned int masterw = MASTERWIDTH;
    14 static unsigned int nmaster = NMASTER;
    14 static unsigned int nmaster = NMASTER;
    15 
    15 
    16 static void
    16 static void
    17 tile(void) {
    17 tile(void) {
    18 	unsigned int i, n, nx, ny, nw, nh, mw, mh, tw, th, remainder;
    18 	unsigned int i, n, nx, ny, nw, nh, mw, mh, tw, th;
    19 	Client *c;
    19 	Client *c;
    20 
    20 
    21 	for(n = 0, c = nexttiled(clients); c; c = nexttiled(c->next))
    21 	for(n = 0, c = nexttiled(clients); c; c = nexttiled(c->next))
    22 		n++;
    22 		n++;
    23 	/* window geoms */
    23 	/* window geoms */
    24 	mh = (n > nmaster) ? wah / nmaster : wah / (n > 0 ? n : 1);
    24 	mh = (n > nmaster) ? wah / nmaster : wah / (n > 0 ? n : 1);
    25 	mw = (n > nmaster) ? (waw * masterw) / 1000 : waw;
    25 	mw = (n > nmaster) ? (waw * masterw) / 1000 : waw;
    26 	th = (n > nmaster) ? wah / (n - nmaster) : 0;
    26 	th = (n > nmaster) ? wah / (n - nmaster) : 0;
    27 	remainder = (n > nmaster) ? wah - th * (n - nmaster) : 0;
       
    28 	tw = waw - mw;
    27 	tw = waw - mw;
    29 
    28 
    30 	for(i = 0, c = clients; c; c = c->next)
    29 	for(i = 0, c = clients; c; c = c->next)
    31 		if(isvisible(c)) {
    30 		if(isvisible(c)) {
    32 			if(c->isbanned)
    31 			if(c->isbanned)
    38 			nx = wax;
    37 			nx = wax;
    39 			ny = way;
    38 			ny = way;
    40 			if(i < nmaster) {
    39 			if(i < nmaster) {
    41 				ny += i * mh;
    40 				ny += i * mh;
    42 				nw = mw - 2 * c->border;
    41 				nw = mw - 2 * c->border;
    43 				nh = mh - 2 * c->border;
    42 				nh = mh;
       
    43 				if(i + 1 == nmaster) /* remainder */
       
    44 					nh = wah - mh * i;
       
    45 				nh -= 2 * c->border;
    44 			}
    46 			}
    45 			else {  /* tile window */
    47 			else {  /* tile window */
    46 				nx += mw;
    48 				nx += mw;
    47 				nw = tw - 2 * c->border;
    49 				nw = tw - 2 * c->border;
    48 				if(th > 2 * c->border) {
    50 				if(th > 2 * c->border) {
    49 					ny += (i - nmaster) * th;
    51 					ny += (i - nmaster) * th;
    50 					nh = th - 2 * c->border;
    52 					nh = th;
    51 					if (i == n - 1)
    53 					if(i + 1 == n) /* remainder */
    52 						nh += remainder;
    54 						nh = wah - th * (i - nmaster);
       
    55 					nh -= 2 * c->border;
    53 				}
    56 				}
    54 				else /* fallback if th <= 2 * c->border */
    57 				else /* fallback if th <= 2 * c->border */
    55 					nh = wah - 2 * c->border;
    58 					nh = wah - 2 * c->border;
    56 			}
    59 			}
    57 			resize(c, nx, ny, nw, nh, False);
    60 			resize(c, nx, ny, nw, nh, False);