layout.c
changeset 935 2032654a0c6d
parent 934 1e8e98b7544d
child 937 453ee57a297c
equal deleted inserted replaced
934:1e8e98b7544d 935:2032654a0c6d
    23 	return x;
    23 	return x;
    24 }
    24 }
    25 
    25 
    26 static void
    26 static void
    27 tile(void) {
    27 tile(void) {
    28 	double mscale = 0, tscale = 0, sum = 0;
    28 	Bool mmaxtile = False, smaxtile = False; /* fallback tiling */
       
    29 	double mscale = 0, sscale = 0, sum = 0;
    29 	unsigned int i, n, nx, ny, nw, nh, mw, tw;
    30 	unsigned int i, n, nx, ny, nw, nh, mw, tw;
    30 	Client *c;
    31 	Client *c;
    31 
    32 
       
    33 	/* preparation */
    32 	for(n = 0, c = nexttiled(clients); c; c = nexttiled(c->next))
    34 	for(n = 0, c = nexttiled(clients); c; c = nexttiled(c->next))
    33 		n++;
    35 		n++;
    34 
    36 	nx = wax;
       
    37 	ny = way;
    35 	mw = (n <= nmaster) ? waw :  waw / (1 + hratio);
    38 	mw = (n <= nmaster) ? waw :  waw / (1 + hratio);
    36 	tw = waw - mw;
    39 	tw = waw - mw;
    37 
       
    38 	if(n > 0) {
    40 	if(n > 0) {
    39 		if(n < nmaster) {
    41 		if(n <= nmaster) {
    40 			for(i = 0; i < n; i++)
    42 			for(i = 0; i < n; i++)
    41 				sum += spow(vratio, i);
    43 				sum += spow(vratio, i);
    42 			mscale = wah / sum;
    44 			mscale = wah / sum;
       
    45 			if(vratio >= 1)
       
    46 				mmaxtile = bh > (mscale * spow(vratio, 0));
       
    47 			else
       
    48 				mmaxtile = bh > (mscale * spow(vratio, n - 1));
    43 		}
    49 		}
    44 		else {
    50 		else {
    45 			for(i = 0; i < nmaster; i++)
    51 			for(i = 0; i < nmaster; i++)
    46 				sum += spow(vratio, i);
    52 				sum += spow(vratio, i);
    47 			mscale = wah / sum;
    53 			mscale = wah / sum;
    48 			for(sum = 0, i = 0; i < (n - nmaster); i++)
    54 			for(sum = 0, i = 0; i < (n - nmaster); i++)
    49 				sum += spow(vratio, i);
    55 				sum += spow(vratio, i);
    50 			tscale = wah / sum;
    56 			sscale = wah / sum;
    51 		}
    57 			if(vratio >= 1) {
    52 	}
    58 				mmaxtile = bh > (mscale * spow(vratio, 0));
    53 	nx = wax;
    59 				smaxtile = bh > (sscale * spow(vratio, 0));
    54 	ny = way;
    60 			}
       
    61 			else {
       
    62 				mmaxtile = bh > (mscale * spow(vratio, nmaster - 1));
       
    63 				smaxtile = bh > (sscale * spow(vratio, n - nmaster - 1));
       
    64 			}
       
    65 		}
       
    66 	}
       
    67 	/* tiling */
    55 	for(i = 0, c = clients; c; c = c->next)
    68 	for(i = 0, c = clients; c; c = c->next)
    56 		if(isvisible(c)) {
    69 		if(isvisible(c)) {
    57 			unban(c);
    70 			unban(c);
    58 			if(c->isfloating)
    71 			if(c->isfloating)
    59 				continue;
    72 				continue;
    60 			c->ismax = False;
    73 			c->ismax = False;
    61 			if(i < nmaster) { /* master window */
    74 			if(i < nmaster) { /* master window */
    62 				nw = mw - 2 * c->border;
    75 				nw = mw - 2 * c->border;
    63 				if(i + 1 == n || i + 1 == nmaster)
    76 				if(mmaxtile) {
    64 					nh = (way + wah) - ny - (2 * c->border);
    77 					ny = way;
       
    78 					nh = wah - 2 * c->border;
       
    79 				}
       
    80 				else if(i + 1 == (n < nmaster ? n : nmaster))
       
    81 					nh = (way + wah) - ny - 2 * c->border;
    65 				else
    82 				else
    66 					nh = (mscale * spow(vratio, i)) - (2 * c->border);
    83 					nh = (mscale * spow(vratio, i)) - 2 * c->border;
    67 			}
    84 			}
    68 			else { /* tile window */
    85 			else { /* tile window */
       
    86 				nw = tw - 2 * c->border;
    69 				if(i == nmaster) {
    87 				if(i == nmaster) {
    70 					ny = way;
    88 					ny = way;
    71 					nx = wax + mw;
    89 					nx = wax + mw;
    72 				}
    90 				}
    73 				nw = tw - 2 * c->border;
    91 				if(smaxtile) {
    74 				if(i + 1 == n)
    92 					ny = way;
    75 					nh = (way + wah) - ny - (2 * c->border);
    93 					nh = wah - 2 * c->border;
       
    94 				}
       
    95 				else if(i + 1 == n)
       
    96 					nh = (way + wah) - ny - 2 * c->border;
    76 				else
    97 				else
    77 					nh = (tscale * spow(vratio, i - nmaster)) - (2 * c->border);
    98 					nh = (sscale * spow(vratio, i - nmaster)) - 2 * c->border;
    78 			}
       
    79 			if(nh < bh) {
       
    80 				nh = bh;
       
    81 				ny = way + wah - nh;
       
    82 			}
    99 			}
    83 			resize(c, nx, ny, nw, nh, False);
   100 			resize(c, nx, ny, nw, nh, False);
    84 			ny += nh;
   101 			ny += nh;
    85 			i++;
   102 			i++;
    86 		}
   103 		}