103 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			103 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
#if VANITYGAPS_PATCH
 | 
						|
void
 | 
						|
nrowgrid(Monitor *m)
 | 
						|
{
 | 
						|
	unsigned int n = 0, i = 0, ri = 0, ci = 0;  /* counters */
 | 
						|
	int oh, ov, ih, iv;                         /* vanitygap settings */
 | 
						|
	unsigned int cx, cy, cw, ch;                /* client geometry */
 | 
						|
	unsigned int uw = 0, uh = 0, uc = 0;        /* utilization trackers */
 | 
						|
	unsigned int cols, rows = m->nmaster + 1;
 | 
						|
	Client *c;
 | 
						|
 | 
						|
	/* count clients */
 | 
						|
	getgaps(m, &oh, &ov, &ih, &iv, &n);
 | 
						|
 | 
						|
	/* nothing to do here */
 | 
						|
	if (n == 0)
 | 
						|
		return;
 | 
						|
 | 
						|
	/* force 2 clients to always split vertically */
 | 
						|
	if (FORCE_VSPLIT && n == 2)
 | 
						|
		rows = 1;
 | 
						|
 | 
						|
	/* never allow empty rows */
 | 
						|
	if (n < rows)
 | 
						|
		rows = n;
 | 
						|
 | 
						|
	/* define first row */
 | 
						|
	cols = n / rows;
 | 
						|
	uc = cols;
 | 
						|
	cy = m->wy + oh;
 | 
						|
	ch = (m->wh - 2*oh - ih*(rows - 1)) / rows;
 | 
						|
	uh = ch;
 | 
						|
 | 
						|
	for (c = nexttiled(m->clients); c; c = nexttiled(c->next), i++, ci++) {
 | 
						|
		if (ci == cols) {
 | 
						|
			uw = 0;
 | 
						|
			ci = 0;
 | 
						|
			ri++;
 | 
						|
 | 
						|
			/* next row */
 | 
						|
			cols = (n - uc) / (rows - ri);
 | 
						|
			uc += cols;
 | 
						|
			cy = m->wy + oh + uh + ih;
 | 
						|
			uh += ch + ih;
 | 
						|
		}
 | 
						|
 | 
						|
		cx = m->wx + ov + uw;
 | 
						|
		cw = (m->ww - 2*ov - uw) / (cols - ci);
 | 
						|
		uw += cw + iv;
 | 
						|
 | 
						|
		resize(c, cx, cy, cw - (2*c->bw), ch - (2*c->bw), 0);
 | 
						|
	}
 | 
						|
}
 | 
						|
#else
 | 
						|
void
 | 
						|
nrowgrid(Monitor *m)
 | 
						|
{
 | 
						|
	unsigned int n = 0, i = 0, ri = 0, ci = 0;  /* counters */
 | 
						|
	unsigned int cx, cy, cw, ch;                /* client geometry */
 | 
						|
	unsigned int uw = 0, uh = 0, uc = 0;        /* utilization trackers */
 | 
						|
	unsigned int cols, rows = m->nmaster + 1;
 | 
						|
	Client *c;
 | 
						|
 | 
						|
	for (n = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), n++);
 | 
						|
	if (n == 0)
 | 
						|
		return;
 | 
						|
 | 
						|
	/* force 2 clients to always split vertically */
 | 
						|
	if (FORCE_VSPLIT && n == 2)
 | 
						|
		rows = 1;
 | 
						|
 | 
						|
	/* never allow empty rows */
 | 
						|
	if (n < rows)
 | 
						|
		rows = n;
 | 
						|
 | 
						|
	/* define first row */
 | 
						|
	cols = n / rows;
 | 
						|
	uc = cols;
 | 
						|
	cy = m->wy;
 | 
						|
	ch = m->wh / rows;
 | 
						|
	uh = ch;
 | 
						|
 | 
						|
	for (c = nexttiled(m->clients); c; c = nexttiled(c->next), i++, ci++) {
 | 
						|
		if (ci == cols) {
 | 
						|
			uw = 0;
 | 
						|
			ci = 0;
 | 
						|
			ri++;
 | 
						|
 | 
						|
			/* next row */
 | 
						|
			cols = (n - uc) / (rows - ri);
 | 
						|
			uc += cols;
 | 
						|
			cy = m->wy + uh;
 | 
						|
			uh += ch;
 | 
						|
		}
 | 
						|
 | 
						|
		cx = m->wx + uw;
 | 
						|
		cw = (m->ww - uw) / (cols - ci);
 | 
						|
		uw += cw;
 | 
						|
 | 
						|
		resize(c, cx, cy, cw - (2*c->bw), ch - (2*c->bw), 0);
 | 
						|
	}
 | 
						|
}
 | 
						|
#endif |