Layouts - re-distributing remaining pixels after even split to address #12

This commit is contained in:
bakkeby
2020-03-20 15:20:07 +01:00
parent 143f94cbc2
commit 8047fe257b
13 changed files with 410 additions and 940 deletions

51
patch/layout_facts.c Normal file
View File

@@ -0,0 +1,51 @@
#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 slave 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 slave 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 slave 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 slave split
}
#endif // CFACTS_PATCH