diff options
| author | bakkeby <[email protected]> | 2020-03-20 15:20:07 +0100 |
|---|---|---|
| committer | bakkeby <[email protected]> | 2020-03-20 15:20:07 +0100 |
| commit | 8047fe257bb95490d5a027a9d3f406f16394108c (patch) | |
| tree | 6904c41307f54373b6c5049903d991ffce77f21e /patch/centeredmaster.c | |
| parent | 143f94cbc2d9d6e4a8432677f2af30be70031a9b (diff) | |
| download | dwm-flexipatch-8047fe257bb95490d5a027a9d3f406f16394108c.tar.gz dwm-flexipatch-8047fe257bb95490d5a027a9d3f406f16394108c.zip | |
Layouts - re-distributing remaining pixels after even split to address #12
Diffstat (limited to 'patch/centeredmaster.c')
| -rw-r--r-- | patch/centeredmaster.c | 251 |
1 files changed, 68 insertions, 183 deletions
diff --git a/patch/centeredmaster.c b/patch/centeredmaster.c index bac7a5b..384a7eb 100644 --- a/patch/centeredmaster.c +++ b/patch/centeredmaster.c @@ -1,4 +1,3 @@ -#if VANITYGAPS_PATCH && CFACTS_PATCH void centeredmaster(Monitor *m) { @@ -6,94 +5,23 @@ centeredmaster(Monitor *m) int mx = 0, my = 0, mh = 0, mw = 0; int lx = 0, ly = 0, lw = 0, lh = 0; int rx = 0, ry = 0, rw = 0, rh = 0; - int oh, ov, ih, iv; float mfacts = 0, lfacts = 0, rfacts = 0; + int mtotal = 0, ltotal = 0, rtotal = 0; + int mrest = 0, lrest = 0, rrest = 0; Client *c; - getgaps(m, &oh, &ov, &ih, &iv, &n); - if (n == 0) - return; - - for (n = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), n++) { - if (!m->nmaster || n < m->nmaster) - mfacts += c->cfact; // total factor of master area - else if ((n - m->nmaster) % 2) - lfacts += c->cfact; // total factor of left hand stacke area - else - rfacts += c->cfact; // total factor of right hand stack area - } - - /* initialize areas */ - mx = m->wx + ov; - my = m->wy + oh; - mh = m->wh - 2*oh - ih * ((!m->nmaster ? n : MIN(n, m->nmaster)) - 1); - mw = m->ww - 2*ov; - lh = m->wh - 2*oh - ih * (((n - m->nmaster) / 2) - 1); - rh = m->wh - 2*oh - ih * (((n - m->nmaster) / 2) - ((n - m->nmaster) % 2 ? 0 : 1)); - - if (m->nmaster && n > m->nmaster) { - /* go mfact box in the center if more than nmaster clients */ - if (n - m->nmaster > 1) { - /* ||<-S->|<---M--->|<-S->|| */ - mw = (m->ww - 2*ov - 2*iv) * m->mfact; - lw = (m->ww - mw - 2*ov - 2*iv) / 2; - mx += lw + iv; - } else { - /* ||<---M--->|<-S->|| */ - mw = (mw - iv) * m->mfact; - lw = m->ww - mw - iv - 2*ov; - } - rw = lw; - lx = m->wx + ov; - ly = m->wy + oh; - rx = mx + mw + iv; - ry = m->wy + oh; - } - - for (i = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), i++) { - if (!m->nmaster || i < m->nmaster) { - /* nmaster clients are stacked vertically, in the center of the screen */ - resize(c, mx, my, mw - (2*c->bw), mh * (c->cfact / mfacts) - (2*c->bw), 0); - my += HEIGHT(c) + ih; - } else { - /* stack clients are stacked vertically */ - if ((i - m->nmaster) % 2 ) { - resize(c, lx, ly, lw - (2*c->bw), lh * (c->cfact / lfacts) - (2*c->bw), 0); - ly += HEIGHT(c) + ih; - } else { - resize(c, rx, ry, rw - (2*c->bw), rh * (c->cfact / rfacts) - (2*c->bw), 0); - ry += HEIGHT(c) + ih; - } - } - } -} -#elif VANITYGAPS_PATCH -void -centeredmaster(Monitor *m) -{ - unsigned int i, n; - int mx = 0, my = 0, mh = 0, mw = 0; - int lx = 0, ly = 0, lw = 0, lh = 0; - int rx = 0, ry = 0, rw = 0, rh = 0; + #if VANITYGAPS_PATCH int oh, ov, ih, iv; - int mn = 0, ln = 0, rn = 0; // number of clients in master, left and right area - Client *c; - getgaps(m, &oh, &ov, &ih, &iv, &n); + #else + for (n = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), n++); + #endif // VANITYGAPS_PATCH if (n == 0) return; - for (n = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), n++) { - if (!m->nmaster || n < m->nmaster) - mn += 1; - else if ((n - m->nmaster) % 2) - ln += 1; // total factor of left hand stacke area - else - rn += 1; // total factor of right hand stack area - } - /* initialize areas */ + #if VANITYGAPS_PATCH mx = m->wx + ov; my = m->wy + oh; mh = m->wh - 2*oh - ih * ((!m->nmaster ? n : MIN(n, m->nmaster)) - 1); @@ -119,48 +47,7 @@ centeredmaster(Monitor *m) rx = mx + mw + iv; ry = m->wy + oh; } - - for (i = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), i++) { - if (!m->nmaster || i < m->nmaster) { - /* nmaster clients are stacked vertically, in the center of the screen */ - resize(c, mx, my, mw - (2*c->bw), mh / mn - (2*c->bw), 0); - my += HEIGHT(c) + ih; - } else { - /* stack clients are stacked vertically */ - if ((i - m->nmaster) % 2 ) { - resize(c, lx, ly, lw - (2*c->bw), lh / ln - (2*c->bw), 0); - ly += HEIGHT(c) + ih; - } else { - resize(c, rx, ry, rw - (2*c->bw), rh / rn - (2*c->bw), 0); - ry += HEIGHT(c) + ih; - } - } - } -} -#elif CFACTS_PATCH -void -centeredmaster(Monitor *m) -{ - unsigned int i, n; - int mx = 0, my = 0, mh = 0, mw = 0; - int lx = 0, ly = 0, lw = 0, lh = 0; - int rx = 0, ry = 0, rw = 0, rh = 0; - float mfacts = 0, lfacts = 0, rfacts = 0; - Client *c; - - for (n = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), n++) { - if (!m->nmaster || n < m->nmaster) - mfacts += c->cfact; // total factor of master area - else if ((n - m->nmaster) % 2) - lfacts += c->cfact; // total factor of left hand stacke area - else - rfacts += c->cfact; // total factor of right hand stack area - } - - if (n == 0) - return; - - /* initialize areas */ + #else mx = m->wx; my = m->wy; mh = m->wh; @@ -186,89 +73,87 @@ centeredmaster(Monitor *m) rx = mx + mw; ry = m->wy; } + #endif // VANITYGAPS_PATCH - for (i = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), i++) { - if (!m->nmaster || i < m->nmaster) { - /* nmaster clients are stacked vertically, in the center of the screen */ - resize(c, mx, my, mw - (2*c->bw), mh * (c->cfact / mfacts) - (2*c->bw), 0); - my += HEIGHT(c); - } else { - /* stack clients are stacked vertically */ - if ((i - m->nmaster) % 2 ) { - resize(c, lx, ly, lw - (2*c->bw), lh * (c->cfact / lfacts) - (2*c->bw), 0); - ly += HEIGHT(c); - } else { - resize(c, rx, ry, rw - (2*c->bw), rh * (c->cfact / rfacts) - (2*c->bw), 0); - ry += HEIGHT(c); - } - } + /* calculate facts */ + #if CFACTS_PATCH + for (n = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), n++) { + if (!m->nmaster || n < m->nmaster) + mfacts += c->cfact; // total factor of master area + else if ((n - m->nmaster) % 2) + lfacts += c->cfact; // total factor of left hand stack area + else + rfacts += c->cfact; // total factor of right hand stack area } -} -#else -void -centeredmaster(Monitor *m) -{ - unsigned int i, n; - int mx = 0, my = 0, mh = 0, mw = 0; - int lx = 0, ly = 0, lw = 0, lh = 0; - int rx = 0, ry = 0, rw = 0, rh = 0; - int mn = 0, ln = 0, rn = 0; // number of clients in master, left and right area - Client *c; + for (n = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), n++) + if (!m->nmaster || n < m->nmaster) + mtotal += mh / mfacts; + else if ((n - m->nmaster) % 2) + ltotal += lh * (c->cfact / lfacts); + else + rtotal += rh * (c->cfact / rfacts); + #else for (n = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), n++) { if (!m->nmaster || n < m->nmaster) - mn += 1; + mfacts += 1; else if ((n - m->nmaster) % 2) - ln += 1; // total factor of left hand stacke area + lfacts += 1; // total factor of left hand stack area else - rn += 1; // total factor of right hand stack area + rfacts += 1; // total factor of right hand stack area } - if (n == 0) - return; + for (n = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), n++) + if (!m->nmaster || n < m->nmaster) + mtotal += mh / mfacts; + else if ((n - m->nmaster) % 2) + ltotal += lh / sfacts; + else + rtotal += rh / lfacts; + #endif // CFACTS_PATCH - /* initialize areas */ - mx = m->wx; - my = m->wy; - mh = m->wh; - mw = m->ww; - lh = m->wh; - rh = m->wh; - - if (m->nmaster && n > m->nmaster) { - /* go mfact box in the center if more than nmaster clients */ - if (n - m->nmaster > 1) { - /* ||<-S->|<---M--->|<-S->|| */ - mw = m->ww * m->mfact; - lw = (m->ww - mw) / 2; - mx += lw; - } else { - /* ||<---M--->|<-S->|| */ - mw = mw * m->mfact; - lw = m->ww - mw; - } - rw = lw; - lx = m->wx; - ly = m->wy; - rx = mx + mw; - ry = m->wy; - } + mrest = mh - mtotal; + lrest = lh - ltotal; + rrest = rh - rtotal; for (i = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), i++) { if (!m->nmaster || i < m->nmaster) { /* nmaster clients are stacked vertically, in the center of the screen */ - resize(c, mx, my, mw - (2*c->bw), mh / mn - (2*c->bw), 0); + #if CFACTS_PATCH + resize(c, mx, my, mw - (2*c->bw), (mh / mfacts) * c->cfact + (i < mrest ? 1 : 0) - (2*c->bw), 0); + #else + resize(c, mx, my, mw - (2*c->bw), (mh / mfacts) + (i < mrest ? 1 : 0) - (2*c->bw), 0); + #endif // CFACTS_PATCH + #if VANITYGAPS_PATCH + my += HEIGHT(c) + ih; + #else my += HEIGHT(c); + #endif } else { /* stack clients are stacked vertically */ if ((i - m->nmaster) % 2 ) { - resize(c, lx, ly, lw - (2*c->bw), lh / ln - (2*c->bw), 0); + #if CFACTS_PATCH + resize(c, lx, ly, lw - (2*c->bw), (lh / lfacts) * c->cfact + ((i - 2*m->nmaster) < 2*lrest ? 1 : 0) - (2*c->bw), 0); + #else + resize(c, lx, ly, lw - (2*c->bw), (lh / lfacts) + ((i - 2*m->nmaster) < 2*lrest ? 1 : 0) - (2*c->bw), 0); + #endif // CFACTS_PATCH + #if VANITYGAPS_PATCH + ly += HEIGHT(c) + ih; + #else ly += HEIGHT(c); + #endif } else { - resize(c, rx, ry, rw - (2*c->bw), rh / rn - (2*c->bw), 0); + #if CFACTS_PATCH + resize(c, rx, ry, rw - (2*c->bw), (rh / rfacts) * c->cfact + ((i - 2*m->nmaster) < 2*rrest ? 1 : 0) - (2*c->bw), 0); + #else + resize(c, rx, ry, rw - (2*c->bw), (rh / rfacts) + ((i - 2*m->nmaster) < 2*rrest ? 1 : 0) - (2*c->bw), 0); + #endif // CFACTS_PATCH + #if VANITYGAPS_PATCH + ry += HEIGHT(c) + ih; + #else ry += HEIGHT(c); + #endif } } } -} -#endif
\ No newline at end of file +}
\ No newline at end of file |
