52 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			52 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| #if CFACTS_PATCH
 | |
| void
 | |
| getfacts(Monitor *m, int msize, int ssize, float *mf, float *sf, int *mr, int *sr)
 | |
| {
 | |
| 	unsigned int n;
 | |
| 	float mfacts = 0, sfacts = 0;
 | |
| 	int mtotal = 0, stotal = 0;
 | |
| 	Client *c;
 | |
| 
 | |
| 	for (n = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), n++)
 | |
| 		if (n < m->nmaster)
 | |
| 			mfacts += c->cfact;
 | |
| 		else
 | |
| 			sfacts += c->cfact;
 | |
| 
 | |
| 	for (n = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), n++)
 | |
| 		if (n < m->nmaster)
 | |
| 			mtotal += msize * (c->cfact / mfacts);
 | |
| 		else
 | |
| 			stotal += ssize * (c->cfact / sfacts);
 | |
| 
 | |
| 	*mf = mfacts; // total factor of master area
 | |
| 	*sf = sfacts; // total factor of stack area
 | |
| 	*mr = msize - mtotal; // the remainder (rest) of pixels after a cfacts master split
 | |
| 	*sr = ssize - stotal; // the remainder (rest) of pixels after a cfacts stack split
 | |
| }
 | |
| #else
 | |
| void
 | |
| getfacts(Monitor *m, int msize, int ssize, float *mf, float *sf, int *mr, int *sr)
 | |
| {
 | |
| 	unsigned int n;
 | |
| 	float mfacts, sfacts;
 | |
| 	int mtotal = 0, stotal = 0;
 | |
| 	Client *c;
 | |
| 
 | |
| 	for (n = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), n++);
 | |
| 	mfacts = MIN(n, m->nmaster);
 | |
| 	sfacts = n - m->nmaster;
 | |
| 
 | |
| 	for (n = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), n++)
 | |
| 		if (n < m->nmaster)
 | |
| 			mtotal += msize / mfacts;
 | |
| 		else
 | |
| 			stotal += ssize / sfacts;
 | |
| 
 | |
| 	*mf = mfacts; // total factor of master area
 | |
| 	*sf = sfacts; // total factor of stack area
 | |
| 	*mr = msize - mtotal; // the remainder (rest) of pixels after an even master split
 | |
| 	*sr = ssize - stotal; // the remainder (rest) of pixels after an even stack split
 | |
| }
 | |
| #endif // CFACTS_PATCH
 |