summaryrefslogtreecommitdiffhomepage
path: root/patch
diff options
context:
space:
mode:
authorbakkeby <[email protected]>2020-03-20 15:20:07 +0100
committerbakkeby <[email protected]>2020-03-20 15:20:07 +0100
commit8047fe257bb95490d5a027a9d3f406f16394108c (patch)
tree6904c41307f54373b6c5049903d991ffce77f21e /patch
parent143f94cbc2d9d6e4a8432677f2af30be70031a9b (diff)
downloaddwm-flexipatch-8047fe257bb95490d5a027a9d3f406f16394108c.tar.gz
dwm-flexipatch-8047fe257bb95490d5a027a9d3f406f16394108c.zip
Layouts - re-distributing remaining pixels after even split to address #12
Diffstat (limited to 'patch')
-rw-r--r--patch/bstack.c137
-rw-r--r--patch/bstackhoriz.c140
-rw-r--r--patch/centeredfloatingmaster.c180
-rw-r--r--patch/centeredmaster.c251
-rw-r--r--patch/cfacts.c21
-rw-r--r--patch/cfacts.h5
-rw-r--r--patch/columns.c132
-rw-r--r--patch/deck.c124
-rw-r--r--patch/flextile-deluxe.c49
-rw-r--r--patch/flextile-deluxe.h1
-rw-r--r--patch/include.c3
-rw-r--r--patch/layout_facts.c51
-rw-r--r--patch/tile.c122
13 files changed, 343 insertions, 873 deletions
diff --git a/patch/bstack.c b/patch/bstack.c
index c171e2d..be06647 100644
--- a/patch/bstack.c
+++ b/patch/bstack.c
@@ -1,96 +1,37 @@
-#if VANITYGAPS_PATCH && CFACTS_PATCH
static void
bstack(Monitor *m)
{
unsigned int i, n;
int mx = 0, my = 0, mh = 0, mw = 0;
int sx = 0, sy = 0, sh = 0, sw = 0;
- int oh, ov, ih, iv;
float mfacts, sfacts;
+ int mrest, srest;
Client *c;
- getgaps(m, &oh, &ov, &ih, &iv, &n);
- getfacts(m, &mfacts, &sfacts);
-
- if (n == 0)
- return;
-
- sx = mx = m->wx + ov;
- sy = my = m->wy + oh;
- sh = mh = m->wh - 2*oh;
- sw = mw = m->ww - 2*ov - iv * (MIN(n, m->nmaster) - 1);
-
- if (m->nmaster && n > m->nmaster) {
- sh = (mh - ih) * (1 - m->mfact);
- mh = (mh - ih) * m->mfact;
- sx = mx;
- sy = my + mh + ih;
- sw = m->ww - 2*ov - iv * (n - m->nmaster - 1);
- }
-
- for (i = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), i++) {
- if (i < m->nmaster) {
- resize(c, mx, my, mw * (c->cfact / mfacts) - (2*c->bw), mh - (2*c->bw), 0);
- mx += WIDTH(c) + iv;
- } else {
- resize(c, sx, sy, sw * (c->cfact / sfacts) - (2*c->bw), sh - (2*c->bw), 0);
- sx += WIDTH(c) + iv;
- }
- }
-}
-#elif VANITYGAPS_PATCH
-static void
-bstack(Monitor *m)
-{
- unsigned int i, n;
- int mx = 0, my = 0, mh = 0, mw = 0;
- int sx = 0, sy = 0, sh = 0, sw = 0;
+ #if VANITYGAPS_PATCH
int oh, ov, ih, iv;
- 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;
+ #if VANITYGAPS_PATCH
sx = mx = m->wx + ov;
sy = my = m->wy + oh;
sh = mh = m->wh - 2*oh;
- sw = mw = m->ww - 2*ov - iv * (MIN(n, m->nmaster) - 1);
+ mw = m->ww - 2*ov - iv * (MIN(n, m->nmaster) - 1);
+ sw = m->ww - 2*ov - iv * (n - m->nmaster - 1);
if (m->nmaster && n > m->nmaster) {
sh = (mh - ih) * (1 - m->mfact);
mh = (mh - ih) * m->mfact;
+ sx = mx;
sy = my + mh + ih;
- sw = m->ww - 2*ov - iv * (n - m->nmaster - 1);
}
-
- for (i = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), i++) {
- if (i < m->nmaster) {
- resize(c, mx, my, mw / MIN(n, m->nmaster) - (2*c->bw), mh - (2*c->bw), 0);
- mx += WIDTH(c) + iv;
- } else {
- resize(c, sx, sy, sw / (n - MIN(n, m->nmaster)) - (2*c->bw), sh - (2*c->bw), 0);
- sx += WIDTH(c) + iv;
- }
- }
-}
-#elif CFACTS_PATCH
-static void
-bstack(Monitor *m)
-{
- unsigned int i, n;
- int mx = 0, my = 0, mh = 0, mw = 0;
- int sx = 0, sy = 0, sh = 0, sw = 0;
- float mfacts, sfacts;
- Client *c;
-
- for (n = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), n++);
- if (n == 0)
- return;
-
- getfacts(m, &mfacts, &sfacts);
-
+ #else
sx = mx = m->wx;
sy = my = m->wy;
sh = mh = m->wh;
@@ -101,49 +42,33 @@ bstack(Monitor *m)
mh = mh * m->mfact;
sy = my + mh;
}
+ #endif // VANITYGAPS_PATCH
- for (i = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), i++) {
- if (i < m->nmaster) {
- resize(c, mx, my, mw * (c->cfact / mfacts) - (2*c->bw), mh - (2*c->bw), 0);
- mx += WIDTH(c);
- } else {
- resize(c, sx, sy, sw * (c->cfact / sfacts) - (2*c->bw), sh - (2*c->bw), 0);
- sx += WIDTH(c);
- }
- }
-}
-#else
-static void
-bstack(Monitor *m)
-{
- unsigned int i, n;
- int mx = 0, my = 0, mh = 0, mw = 0;
- int sx = 0, sy = 0, sh = 0, sw = 0;
- Client *c;
-
- for (n = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), n++);
- if (n == 0)
- return;
-
- sx = mx = m->wx;
- sy = my = m->wy;
- sh = mh = m->wh;
- sw = mw = m->ww;
-
- if (m->nmaster && n > m->nmaster) {
- sh = mh * (1 - m->mfact);
- mh = mh * m->mfact;
- sy = my + mh;
- }
+ getfacts(m, mw, sw, &mfacts, &sfacts, &mrest, &srest);
for (i = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), i++) {
if (i < m->nmaster) {
- resize(c, mx, my, mw / MIN(n, m->nmaster) - (2*c->bw), mh - (2*c->bw), 0);
+ #if CFACTS_PATCH
+ resize(c, mx, my, (mw / mfacts) * c->cfact + (i < mrest ? 1 : 0) - (2*c->bw), mh - (2*c->bw), 0);
+ #else
+ resize(c, mx, my, (mw / mfacts) + (i < mrest ? 1 : 0) - (2*c->bw), mh - (2*c->bw), 0);
+ #endif // CFACTS_PATCH
+ #if VANITYGAPS_PATCH
+ mx += WIDTH(c) + iv;
+ #else
mx += WIDTH(c);
+ #endif
} else {
- resize(c, sx, sy, sw / (n - MIN(n, m->nmaster)) - (2*c->bw), sh - (2*c->bw), 0);
+ #if CFACTS_PATCH
+ resize(c, sx, sy, (sw / sfacts) * c->cfact + ((i - m->nmaster) < srest ? 1 : 0) - (2*c->bw), sh - (2*c->bw), 0);
+ #else
+ resize(c, sx, sy, (sw / sfacts) + ((i - m->nmaster) < srest ? 1 : 0) - (2*c->bw), sh - (2*c->bw), 0);
+ #endif // CFACTS_PATCH
+ #if VANITYGAPS_PATCH
+ sx += WIDTH(c) + iv;
+ #else
sx += WIDTH(c);
+ #endif
}
}
-}
-#endif \ No newline at end of file
+} \ No newline at end of file
diff --git a/patch/bstackhoriz.c b/patch/bstackhoriz.c
index b4010fa..0f9042f 100644
--- a/patch/bstackhoriz.c
+++ b/patch/bstackhoriz.c
@@ -1,97 +1,38 @@
-#if VANITYGAPS_PATCH && CFACTS_PATCH
static void
bstackhoriz(Monitor *m)
{
unsigned int i, n;
int mx = 0, my = 0, mh = 0, mw = 0;
int sx = 0, sy = 0, sh = 0, sw = 0;
- int oh, ov, ih, iv;
float mfacts, sfacts;
+ int mrest, srest;
Client *c;
- getgaps(m, &oh, &ov, &ih, &iv, &n);
- getfacts(m, &mfacts, &sfacts);
-
- if (n == 0)
- return;
-
- sx = mx = m->wx + ov;
- sy = my = m->wy + oh;
- sh = mh = m->wh - 2*oh;
- sw = mw = m->ww - 2*ov - iv * (MIN(n, m->nmaster) - 1);
-
- if (m->nmaster && n > m->nmaster) {
- sh = (mh - ih) * (1 - m->mfact);
- mh = (mh - ih) * m->mfact;
- sy = my + mh + ih;
- sh = m->wh - mh - 2*oh - ih * (n - m->nmaster);
- sw = m->ww - 2*ov;
- }
-
- for (i = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), i++) {
- if (i < m->nmaster) {
- resize(c, mx, my, mw * (c->cfact / mfacts) - (2*c->bw), mh - (2*c->bw), 0);
- mx += WIDTH(c) + iv;
- } else {
- resize(c, sx, sy, sw - (2*c->bw), sh * (c->cfact / sfacts) - (2*c->bw), 0);
- sy += HEIGHT(c) + ih;
- }
- }
-}
-#elif VANITYGAPS_PATCH
-static void
-bstackhoriz(Monitor *m)
-{
- unsigned int i, n;
- int mx = 0, my = 0, mh = 0, mw = 0;
- int sx = 0, sy = 0, sh = 0, sw = 0;
+ #if VANITYGAPS_PATCH
int oh, ov, ih, iv;
- 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;
+ #if VANITYGAPS_PATCH
sx = mx = m->wx + ov;
sy = my = m->wy + oh;
- sh = mh = m->wh - 2*oh;
- sw = mw = m->ww - 2*ov - iv * (MIN(n, m->nmaster) - 1);
+ mh = m->wh - 2*oh;
+ sh = m->wh - 2*oh - ih * (n - m->nmaster - 1);
+ mw = m->ww - 2*ov - iv * (MIN(n, m->nmaster) - 1);
+ sw = m->ww - 2*ov;
if (m->nmaster && n > m->nmaster) {
sh = (mh - ih) * (1 - m->mfact);
mh = (mh - ih) * m->mfact;
sy = my + mh + ih;
sh = m->wh - mh - 2*oh - ih * (n - m->nmaster);
- sw = m->ww - 2*ov;
}
-
- for (i = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), i++) {
- if (i < m->nmaster) {
- resize(c, mx, my, mw / MIN(n, m->nmaster) - (2*c->bw), mh - (2*c->bw), 0);
- mx += WIDTH(c) + iv;
- } else {
- resize(c, sx, sy, sw - (2*c->bw), sh / (n - MIN(n, m->nmaster)) - (2*c->bw), 0);
- sy += HEIGHT(c) + ih;
- }
- }
-}
-#elif CFACTS_PATCH
-static void
-bstackhoriz(Monitor *m)
-{
- unsigned int i, n;
- int mx = 0, my = 0, mh = 0, mw = 0;
- int sx = 0, sy = 0, sh = 0, sw = 0;
- float mfacts, sfacts;
- Client *c;
-
- for (n = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), n++);
- if (n == 0)
- return;
-
- getfacts(m, &mfacts, &sfacts);
-
+ #else
sx = mx = m->wx;
sy = my = m->wy;
sh = mh = m->wh;
@@ -103,50 +44,33 @@ bstackhoriz(Monitor *m)
sy = my + mh;
sh = m->wh - mh;
}
+ #endif // VANITYGAPS_PATCH
- for (i = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), i++) {
- if (i < m->nmaster) {
- resize(c, mx, my, mw * (c->cfact / mfacts) - (2*c->bw), mh - (2*c->bw), 0);
- mx += WIDTH(c);
- } else {
- resize(c, sx, sy, sw - (2*c->bw), sh * (c->cfact / sfacts) - (2*c->bw), 0);
- sy += HEIGHT(c);
- }
- }
-}
-#else
-static void
-bstackhoriz(Monitor *m)
-{
- unsigned int i, n;
- int mx = 0, my = 0, mh = 0, mw = 0;
- int sx = 0, sy = 0, sh = 0, sw = 0;
- Client *c;
-
- for (n = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), n++);
- if (n == 0)
- return;
-
- sx = mx = m->wx;
- sy = my = m->wy;
- sh = mh = m->wh;
- sw = mw = m->ww;
-
- if (m->nmaster && n > m->nmaster) {
- sh = mh * (1 - m->mfact);
- mh = mh * m->mfact;
- sy = my + mh;
- sh = m->wh - mh;
- }
+ getfacts(m, mw, sh, &mfacts, &sfacts, &mrest, &srest);
for (i = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), i++) {
if (i < m->nmaster) {
- resize(c, mx, my, mw / MIN(n, m->nmaster) - (2*c->bw), mh - (2*c->bw), 0);
+ #if CFACTS_PATCH
+ resize(c, mx, my, (mw / mfacts) * c->cfact + (i < mrest ? 1 : 0) - (2*c->bw), mh - (2*c->bw), 0);
+ #else
+ resize(c, mx, my, (mw / mfacts) + (i < mrest ? 1 : 0) - (2*c->bw), mh - (2*c->bw), 0);
+ #endif // CFACTS_PATCH
+ #if VANITYGAPS_PATCH
+ mx += WIDTH(c) + iv;
+ #else
mx += WIDTH(c);
+ #endif
} else {
- resize(c, sx, sy, sw - (2*c->bw), sh / (n - MIN(n, m->nmaster)) - (2*c->bw), 0);
+ #if CFACTS_PATCH
+ resize(c, sx, sy, sw - (2*c->bw), (sh / sfacts) * c->cfact + ((i - m->nmaster) < srest ? 1 : 0) - (2*c->bw), 0);
+ #else
+ resize(c, sx, sy, sw - (2*c->bw), (sh / sfacts) + ((i - m->nmaster) < srest ? 1 : 0) - (2*c->bw), 0);
+ #endif // CFACTS_PATCH
+ #if VANITYGAPS_PATCH
+ sy += HEIGHT(c) + ih;
+ #else
sy += HEIGHT(c);
+ #endif
}
}
-}
-#endif \ No newline at end of file
+} \ No newline at end of file
diff --git a/patch/centeredfloatingmaster.c b/patch/centeredfloatingmaster.c
index d4fcb5d..e052c24 100644
--- a/patch/centeredfloatingmaster.c
+++ b/patch/centeredfloatingmaster.c
@@ -1,83 +1,33 @@
-#if VANITYGAPS_PATCH && CFACTS_PATCH
void
centeredfloatingmaster(Monitor *m)
{
unsigned int i, n;
- float mivf, mfacts, sfacts;
+ float mfacts, sfacts;
+ int mrest, srest;
int mx = 0, my = 0, mh = 0, mw = 0;
int sx = 0, sy = 0, sh = 0, sw = 0;
- int oh, ov, ih, iv;
Client *c;
- getgaps(m, &oh, &ov, &ih, &iv, &n);
- getfacts(m, &mfacts, &sfacts);
-
- if (n == 0)
- return;
-
- mivf = 0.8; // master inner vertical gap factor
-
- sx = mx = m->wx + ov;
- sy = my = m->wy + oh;
- sh = mh = m->wh - 2*oh;
- sw = mw = m->ww - 2*ov - iv*(n - 1);
-
- if (m->nmaster && n > m->nmaster) {
- /* go mfact box in the center if more than nmaster clients */
- if (m->ww > m->wh) {
- mw = m->ww * m->mfact - iv*mivf*(MIN(n, m->nmaster) - 1);
- mh = m->wh * 0.9;
- } else {
- mw = m->ww * 0.9 - iv*mivf*(MIN(n, m->nmaster) - 1);
- mh = m->wh * m->mfact;
- }
- mx = m->wx + (m->ww - mw) / 2;
- my = m->wy + (m->wh - mh - 2*oh) / 2;
-
- sx = m->wx + ov;
- sy = m->wy + oh;
- sh = m->wh - 2*oh;
- sw = m->ww - 2*ov - iv*(n - m->nmaster - 1);
- }
-
- for (i = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), i++) {
- if (i < m->nmaster) {
- /* nmaster clients are stacked horizontally, in the center of the screen */
- resize(c, mx, my, mw * (c->cfact / mfacts) - (2*c->bw), mh - (2*c->bw), 0);
- mx += WIDTH(c) + iv*mivf;
- focus(c);
- } else {
- /* stack clients are stacked horizontally */
- resize(c, sx, sy, sw * (c->cfact / sfacts) - (2*c->bw), sh - (2*c->bw), 0);
- sx += WIDTH(c) + iv;
- }
- }
- restack(m);
-}
-#elif VANITYGAPS_PATCH
-void
-centeredfloatingmaster(Monitor *m)
-{
- unsigned int i, n;
- float mivf;
- int mx = 0, my = 0, mh = 0, mw = 0;
- int sx = 0, sy = 0, sh = 0, sw = 0;
+ #if VANITYGAPS_PATCH
+ float mivf = 1.0; // master inner vertical gap factor
int oh, ov, ih, iv;
- 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;
- mivf = 0.8; // master inner vertical gap factor
-
+ #if VANITYGAPS_PATCH
sx = mx = m->wx + ov;
sy = my = m->wy + oh;
sh = mh = m->wh - 2*oh;
- sw = mw = m->ww - 2*ov - iv*(n - 1);
+ mw = m->ww - 2*ov - iv*(n - 1);
+ sw = m->ww - 2*ov - iv*(n - m->nmaster - 1);
if (m->nmaster && n > m->nmaster) {
+ mivf = 0.8;
/* go mfact box in the center if more than nmaster clients */
if (m->ww > m->wh) {
mw = m->ww * m->mfact - iv*mivf*(MIN(n, m->nmaster) - 1);
@@ -92,39 +42,8 @@ centeredfloatingmaster(Monitor *m)
sx = m->wx + ov;
sy = m->wy + oh;
sh = m->wh - 2*oh;
- sw = m->ww - 2*ov - iv*(n - m->nmaster - 1);
- }
-
- for (i = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), i++) {
- if (i < m->nmaster) {
- /* nmaster clients are stacked horizontally, in the center of the screen */
- resize(c, mx, my, mw / MIN(n, m->nmaster) - (2*c->bw), mh - (2*c->bw), 0);
- mx += WIDTH(c) + iv*mivf;
- focus(c);
- } else {
- /* stack clients are stacked horizontally */
- resize(c, sx, sy, sw / (n - MIN(n, m->nmaster)) - (2*c->bw), sh - (2*c->bw), 0);
- sx += WIDTH(c) + iv;
- }
}
- restack(m);
-}
-#elif CFACTS_PATCH
-void
-centeredfloatingmaster(Monitor *m)
-{
- unsigned int i, n;
- float mfacts, sfacts;
- int mx = 0, my = 0, mh = 0, mw = 0;
- int sx = 0, sy = 0, sh = 0, sw = 0;
- Client *c;
-
- for (n = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), n++);
- if (n == 0)
- return;
-
- getfacts(m, &mfacts, &sfacts);
-
+ #else
sx = mx = m->wx;
sy = my = m->wy;
sh = mh = m->wh;
@@ -142,64 +61,37 @@ centeredfloatingmaster(Monitor *m)
mx = m->wx + (m->ww - mw) / 2;
my = m->wy + (m->wh - mh) / 2;
}
+ #endif // VANITYGAPS_PATCH
- for (i = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), i++) {
- if (i < m->nmaster) {
- /* nmaster clients are stacked horizontally, in the center of the screen */
- resize(c, mx, my, mw * (c->cfact / mfacts) - (2*c->bw), mh - (2*c->bw), 0);
- mx += WIDTH(c);
- focus(c);
- } else {
- /* stack clients are stacked horizontally */
- resize(c, sx, sy, sw * (c->cfact / sfacts) - (2*c->bw), sh - (2*c->bw), 0);
- sx += WIDTH(c);
- }
- }
- restack(m);
-}
-#else
-void
-centeredfloatingmaster(Monitor *m)
-{
- unsigned int i, n;
- int mx = 0, my = 0, mh = 0, mw = 0;
- int sx = 0, sy = 0, sh = 0, sw = 0;
- Client *c;
-
- for (n = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), n++);
- if (n == 0)
- return;
-
- sx = mx = m->wx;
- sy = my = m->wy;
- sh = mh = m->wh;
- sw = mw = m->ww;
-
- if (m->nmaster && n > m->nmaster) {
- /* go mfact box in the center if more than nmaster clients */
- if (m->ww > m->wh) {
- mw = m->ww * m->mfact;
- mh = m->wh * 0.9;
- } else {
- mw = m->ww * 0.9;
- mh = m->wh * m->mfact;
- }
- mx = m->wx + (m->ww - mw) / 2;
- my = m->wy + (m->wh - mh) / 2;
- }
+ getfacts(m, mw, sw, &mfacts, &sfacts, &mrest, &srest);
- for (i = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), i++) {
+ for (i = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), i++)
if (i < m->nmaster) {
/* nmaster clients are stacked horizontally, in the center of the screen */
- resize(c, mx, my, mw / MIN(n, m->nmaster) - (2*c->bw), mh - (2*c->bw), 0);
+ #if CFACTS_PATCH
+ resize(c, mx, my, (mw / mfacts) * c->cfact + (i < mrest ? 1 : 0) - (2*c->bw), mh - (2*c->bw), 0);
+ #else
+ resize(c, mx, my, (mw / mfacts) + (i < mrest ? 1 : 0) - (2*c->bw), mh - (2*c->bw), 0);
+ #endif // CFACTS_PATCH
+ #if VANITYGAPS_PATCH
+ mx += WIDTH(c) + iv*mivf;
+ #else
mx += WIDTH(c);
- focus(c);
+ #endif
+ detachstack(c);
+ attachstack(c);
} else {
/* stack clients are stacked horizontally */
- resize(c, sx, sy, sw / (n - MIN(n, m->nmaster)) - (2*c->bw), sh - (2*c->bw), 0);
+ #if CFACTS_PATCH
+ resize(c, sx, sy, sw * (c->cfact / sfacts) + ((i - m->nmaster) < srest ? 1 : 0) - (2*c->bw), sh - (2*c->bw), 0);
+ #else
+ resize(c, sx, sy, sw * (c->cfact / sfacts) + ((i - m->nmaster) < srest ? 1 : 0) - (2*c->bw), sh - (2*c->bw), 0);
+ #endif // CFACTS_PATCH
+ #if VANITYGAPS_PATCH
+ sx += WIDTH(c) + iv;
+ #else
sx += WIDTH(c);
+ #endif
}
- }
restack(m);
-}
-#endif \ No newline at end of file
+} \ No newline at end of file
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
diff --git a/patch/cfacts.c b/patch/cfacts.c
index 82ee560..0307eb6 100644
--- a/patch/cfacts.c
+++ b/patch/cfacts.c
@@ -15,23 +15,4 @@ setcfact(const Arg *arg)
return;
c->cfact = f;
arrange(selmon);
-}
-
-#if BSTACK_LAYOUT || BSTACKHORIZ_LAYOUT || CENTEREDMASTER_LAYOUT || CENTEREDFLOATINGMASTER_LAYOUT || COLUMNS_LAYOUT || DECK_LAYOUT || TILE_LAYOUT
-void
-getfacts(Monitor *m, float *mf, float *sf)
-{
- unsigned int n;
- float mfacts = 0, sfacts = 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;
- else
- sfacts += c->cfact;
- }
- *mf = mfacts; // total factor of master area
- *sf = sfacts; // total factor of slave area
-}
-#endif
+} \ No newline at end of file
diff --git a/patch/cfacts.h b/patch/cfacts.h
index 9b135df..b8d8b04 100644
--- a/patch/cfacts.h
+++ b/patch/cfacts.h
@@ -1,4 +1 @@
-#if BSTACK_LAYOUT || BSTACKHORIZ_LAYOUT || CENTEREDMASTER_LAYOUT || CENTEREDFLOATINGMASTER_LAYOUT || COLUMNS_LAYOUT || DECK_LAYOUT || TILE_LAYOUT
-static void getfacts(Monitor *m, float *mf, float *sf);
-#endif
-static void setcfact(const Arg *arg);
+static void setcfact(const Arg *arg); \ No newline at end of file
diff --git a/patch/columns.c b/patch/columns.c
index 07fd39f..bcdaa11 100644
--- a/patch/columns.c
+++ b/patch/columns.c
@@ -1,93 +1,37 @@
-#if VANITYGAPS_PATCH && CFACTS_PATCH
static void
col(Monitor *m)
{
unsigned int i, n;
int mx = 0, my = 0, mh = 0, mw = 0;
int sx = 0, sy = 0, sh = 0, sw = 0;
- int oh, ov, ih, iv;
float mfacts, sfacts;
+ int mrest, srest;
Client *c;
- getgaps(m, &oh, &ov, &ih, &iv, &n);
- getfacts(m, &mfacts, &sfacts);
-
- if (n == 0)
- return;
-
- sx = mx = m->wx + ov;
- sy = my = m->wy + oh;
- sh = mh = m->wh - 2*oh - ih * (MIN(n, m->nmaster) - 1);
- sw = mw = m->ww - 2*ov;
-
- if (m->nmaster && n > m->nmaster) {
- sw = (mw - iv) * (1 - m->mfact);
- mw = (mw - iv) * m->mfact;
- sx = mx + mw + iv;
- sh = m->wh - 2*oh - ih * (n - m->nmaster - 1);
- }
-
- for (i = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), i++)
- if (i < m->nmaster) {
- resize(c, mx, my, mw * (c->cfact / mfacts) - (2*c->bw), mh - (2*c->bw), 0);
- mx += WIDTH(c) + iv;
- } else {
- resize(c, sx, sy, sw - (2*c->bw), sh * (c->cfact / sfacts) - (2*c->bw), 0);
- sy += HEIGHT(c) + ih;
- }
-}
-#elif VANITYGAPS_PATCH
-static void
-col(Monitor *m)
-{
- unsigned int i, n;
- int mx = 0, my = 0, mh = 0, mw = 0;
- int sx = 0, sy = 0, sh = 0, sw = 0;
+ #if VANITYGAPS_PATCH
int oh, ov, ih, iv;
- 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;
+ #if VANITYGAPS_PATCH
sx = mx = m->wx + ov;
sy = my = m->wy + oh;
- sh = mh = m->wh - 2*oh - ih * (MIN(n, m->nmaster) - 1);
- sw = mw = m->ww - 2*ov;
+ mh = m->wh - 2*oh;
+ sh = m->wh - 2*oh - ih * (n - m->nmaster - 1);
+ mw = m->ww - 2*ov - iv * (MIN(n, m->nmaster) - 1);
+ sw = m->ww - 2*ov;
if (m->nmaster && n > m->nmaster) {
sw = (mw - iv) * (1 - m->mfact);
mw = (mw - iv) * m->mfact;
- sx = mx + mw + iv;
- sh = m->wh - 2*oh - ih * (n - m->nmaster - 1);
+ sx = mx + mw + iv * m->nmaster;
}
-
- for (i = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), i++)
- if (i < m->nmaster) {
- resize(c, mx, my, mw / MIN(n, m->nmaster) - (2*c->bw), mh - (2*c->bw), 0);
- mx += WIDTH(c) + iv;
- } else {
- resize(c, sx, sy, sw - (2*c->bw), sh / (n - MIN(n, m->nmaster)) - (2*c->bw), 0);
- sy += HEIGHT(c) + ih;
- }
-}
-#elif CFACTS_PATCH
-static void
-col(Monitor *m)
-{
- unsigned int i, n;
- int mx = 0, my = 0, mh = 0, mw = 0;
- int sx = 0, sy = 0, sh = 0, sw = 0;
- float mfacts, sfacts;
- Client *c;
-
- for (n = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), n++);
- if (n == 0)
- return;
-
- getfacts(m, &mfacts, &sfacts);
-
+ #else
sx = mx = m->wx;
sy = my = m->wy;
sh = mh = m->wh;
@@ -98,40 +42,32 @@ col(Monitor *m)
mw = mw * m->mfact;
sx = mx + mw;
}
+ #endif // VANITYGAPS_PATCH
+
+ getfacts(m, mw, sh, &mfacts, &sfacts, &mrest, &srest);
for (i = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), i++)
if (i < m->nmaster) {
- resize(c, mx, my, mw * (c->cfact / mfacts) - (2*c->bw), mh - (2*c->bw), 0);
+ #if CFACTS_PATCH
+ resize(c, mx, my, (mw / mfacts) * c->cfact + (i < mrest ? 1 : 0) - (2*c->bw), mh - (2*c->bw), 0);
+ #else
+ resize(c, mx, my, (mw / mfacts) + (i < mrest ? 1 : 0) - (2*c->bw), mh - (2*c->bw), 0);
+ #endif // CFACTS_PATCH
+ #if VANITYGAPS_PATCH
+ mx += WIDTH(c) + iv;
+ #else
mx += WIDTH(c);
+ #endif
} else {
- resize(c, sx, sy, sw - (2*c->bw), sh * (c->cfact / sfacts) - (2*c->bw), 0);
+ #if CFACTS_PATCH
+ resize(c, sx, sy, sw - (2*c->bw), (sh / sfacts) * c->cfact + ((i - m->nmaster) < srest ? 1 : 0) - (2*c->bw), 0);
+ #else
+ resize(c, sx, sy, sw - (2*c->bw), (sh / sfacts) + ((i - m->nmaster) < srest ? 1 : 0) - (2*c->bw), 0);
+ #endif // CFACTS_PATCH
+ #if VANITYGAPS_PATCH
+ sy += HEIGHT(c) + ih;
+ #else
sy += HEIGHT(c);
+ #endif
}
-}
-#else
-void
-col(Monitor *m) {
- unsigned int i, n, h, w, x, y,mw;
- Client *c;
-
- for (n = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), n++);
- if (n == 0)
- return;
- if (n > m->nmaster)
- mw = m->nmaster ? m->ww * m->mfact : 0;
- else
- mw = m->ww;
- for (i = x = y = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), i++) {
- if (i < m->nmaster) {
- w = (mw - x) / (MIN(n, m->nmaster)-i);
- resize(c, x + m->wx, m->wy, w - (2*c->bw), m->wh - (2*c->bw), False);
- x += WIDTH(c);
- }
- else {
- h = (m->wh - y) / (n - i);
- resize(c, x + m->wx, m->wy + y, m->ww - x - (2*c->bw), h - (2*c->bw), False);
- y += HEIGHT(c);
- }
- }
-}
-#endif \ No newline at end of file
+} \ No newline at end of file
diff --git a/patch/deck.c b/patch/deck.c
index 98d0794..6f2027d 100644
--- a/patch/deck.c
+++ b/patch/deck.c
@@ -1,58 +1,24 @@
-#if VANITYGAPS_PATCH && CFACTS_PATCH
static void
deck(Monitor *m)
{
unsigned int i, n;
int mx = 0, my = 0, mh = 0, mw = 0;
int sx = 0, sy = 0, sh = 0, sw = 0;
- int oh, ov, ih, iv;
float mfacts, sfacts;
+ int mrest, srest;
Client *c;
- getgaps(m, &oh, &ov, &ih, &iv, &n);
- getfacts(m, &mfacts, &sfacts);
-
- if (n == 0)
- return;
-
- sx = mx = m->wx + ov;
- sy = my = m->wy + oh;
- sh = mh = m->wh - 2*oh - ih * (MIN(n, m->nmaster) - 1);
- sw = mw = m->ww - 2*ov;
-
- if (m->nmaster && n > m->nmaster) {
- sw = (mw - iv) * (1 - m->mfact);
- mw = (mw - iv) * m->mfact;
- sx = mx + mw + iv;
- sh = m->wh - 2*oh;
- }
-
- if (n - m->nmaster > 0) /* override layout symbol */
- snprintf(m->ltsymbol, sizeof m->ltsymbol, "D %d", n - m->nmaster);
-
- for (i = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), i++)
- if (i < m->nmaster) {
- resize(c, mx, my, mw - (2*c->bw), mh * (c->cfact / mfacts) - (2*c->bw), 0);
- my += HEIGHT(c) + ih;
- } else {
- resize(c, sx, sy, sw - (2*c->bw), sh - (2*c->bw), 0);
- }
-}
-#elif VANITYGAPS_PATCH
-static void
-deck(Monitor *m)
-{
- unsigned int i, n;
- int mx = 0, my = 0, mh = 0, mw = 0;
- int sx = 0, sy = 0, sh = 0, sw = 0;
+ #if VANITYGAPS_PATCH
int oh, ov, ih, iv;
- 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;
+ #if VANITYGAPS_PATCH
sx = mx = m->wx + ov;
sy = my = m->wy + oh;
sh = mh = m->wh - 2*oh - ih * (MIN(n, m->nmaster) - 1);
@@ -64,34 +30,7 @@ deck(Monitor *m)
sx = mx + mw + iv;
sh = m->wh - 2*oh;
}
-
- if (n - m->nmaster > 0) /* override layout symbol */
- snprintf(m->ltsymbol, sizeof m->ltsymbol, "D %d", n - m->nmaster);
-
- for (i = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), i++)
- if (i < m->nmaster) {
- resize(c, mx, my, mw - (2*c->bw), mh / MIN(n, m->nmaster) - (2*c->bw), 0);
- my += HEIGHT(c) + ih;
- } else {
- resize(c, sx, sy, sw - (2*c->bw), sh - (2*c->bw), 0);
- }
-}
-#elif CFACTS_PATCH
-static void
-deck(Monitor *m)
-{
- unsigned int i, n;
- int mx = 0, my = 0, mh = 0, mw = 0;
- int sx = 0, sy = 0, sh = 0, sw = 0;
- float mfacts, sfacts;
- Client *c;
-
- for (n = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), n++);
- if (n == 0)
- return;
-
- getfacts(m, &mfacts, &sfacts);
-
+ #else
sx = mx = m->wx;
sy = my = m->wy;
sh = mh = m->wh;
@@ -102,51 +41,26 @@ deck(Monitor *m)
mw = mw * m->mfact;
sx = mx + mw;
}
+ #endif // VANITYGAPS_PATCH
- if (n - m->nmaster > 0) /* override layout symbol */
- snprintf(m->ltsymbol, sizeof m->ltsymbol, "D %d", n - m->nmaster);
-
- for (i = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), i++)
- if (i < m->nmaster) {
- resize(c, mx, my, mw - (2*c->bw), mh * (c->cfact / mfacts) - (2*c->bw), 0);
- my += HEIGHT(c);
- } else {
- resize(c, sx, sy, sw - (2*c->bw), sh - (2*c->bw), 0);
- }
-}
-#else
-static void
-deck(Monitor *m)
-{
- unsigned int i, n;
- int mx = 0, my = 0, mh = 0, mw = 0;
- int sx = 0, sy = 0, sh = 0, sw = 0;
- Client *c;
-
- for (n = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), n++);
- if (n == 0)
- return;
-
- sx = mx = m->wx;
- sy = my = m->wy;
- sh = mh = m->wh;
- sw = mw = m->ww;
-
- if (m->nmaster && n > m->nmaster) {
- sw = mw * (1 - m->mfact);
- mw = mw * m->mfact;
- sx = mx + mw;
- }
+ getfacts(m, mh, sh, &mfacts, &sfacts, &mrest, &srest);
if (n - m->nmaster > 0) /* override layout symbol */
snprintf(m->ltsymbol, sizeof m->ltsymbol, "D %d", n - m->nmaster);
for (i = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), i++)
if (i < m->nmaster) {
- resize(c, mx, my, mw - (2*c->bw), mh / MIN(n, m->nmaster) - (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 {
resize(c, sx, sy, sw - (2*c->bw), sh - (2*c->bw), 0);
}
-}
-#endif \ No newline at end of file
+} \ No newline at end of file
diff --git a/patch/flextile-deluxe.c b/patch/flextile-deluxe.c
index 909f3b2..e5aa88b 100644
--- a/patch/flextile-deluxe.c
+++ b/patch/flextile-deluxe.c
@@ -35,12 +35,13 @@ static const TileArranger flextiles[] = {
{ arrange_spiral },
};
-static float
-getfactsforrange(Monitor *m, int an, int ai)
+static void
+getfactsforrange(Monitor *m, int an, int ai, int size, int *rest, float *fact)
{
int i;
float facts;
Client *c;
+ int total = 0;
facts = 0;
for (i = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), i++)
@@ -51,7 +52,16 @@ getfactsforrange(Monitor *m, int an, int ai)
facts += 1;
#endif // CFACTS_PATCH
- return facts;
+ for (i = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), i++)
+ if (i >= ai && i < (ai + an))
+ #if CFACTS_PATCH
+ total += size * (c->cfact / facts);
+ #else
+ total += size / sfacts;
+ #endif // CFACTS_PATCH
+
+ *rest = size - total;
+ *fact = facts;
}
static void
@@ -302,27 +312,29 @@ layout_floating_master_fixed(Monitor *m, int x, int y, int h, int w, int ih, int
mw = w * 0.9;
mh = h * m->mfact;
}
- x += (w - mw) / 2;
- y += (h - mh) / 2;
+ x = x + (w - mw) / 2;
+ y = y + (h - mh) / 2;
(&flextiles[m->ltaxis[MASTER]])->arrange(m, x, y, mh, mw, ih, iv, n, m->nmaster, 0);
+ reattachstack(m, m->nmaster, 0);
+ restack(m);
}
static void
arrange_left_to_right(Monitor *m, int x, int y, int h, int w, int ih, int iv, int n, int an, int ai)
{
- int i;
+ int i, rest;
float facts, fact = 1;
Client *c;
w -= iv * (an - 1);
- facts = getfactsforrange(m, an, ai);
+ getfactsforrange(m, an, ai, w, &rest, &facts);
for (i = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), i++) {
if (i >= ai && i < (ai + an)) {
#if CFACTS_PATCH
fact = c->cfact;
#endif // CFACTS_PATCH
- resize(c, x, y, w * (fact / facts) - (2*c->bw), h - (2*c->bw), 0);
+ resize(c, x, y, w * (fact / facts) + ((i - ai) < rest ? 1 : 0) - (2*c->bw), h - (2*c->bw), 0);
x += WIDTH(c) + iv;
}
}
@@ -331,18 +343,18 @@ arrange_left_to_right(Monitor *m, int x, int y, int h, int w, int ih, int iv, in
static void
arrange_top_to_bottom(Monitor *m, int x, int y, int h, int w, int ih, int iv, int n, int an, int ai)
{
- int i;
+ int i, rest;
float facts, fact = 1;
Client *c;
h -= ih * (an - 1);
- facts = getfactsforrange(m, an, ai);
+ getfactsforrange(m, an, ai, h, &rest, &facts);
for (i = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), i++) {
if (i >= ai && i < (ai + an)) {
#if CFACTS_PATCH
fact = c->cfact;
#endif // CFACTS_PATCH
- resize(c, x, y, w - (2*c->bw), h * (fact / facts) - (2*c->bw), 0);
+ resize(c, x, y, w - (2*c->bw), h * (fact / facts) + ((i - ai) < rest ? 1 : 0) - (2*c->bw), 0);
y += HEIGHT(c) + ih;
}
}
@@ -655,4 +667,17 @@ incnstack(const Arg *arg)
selmon->nstack = MAX(selmon->nstack + arg->i, 0);
#endif // PERTAG_PATCH
arrange(selmon);
-} \ No newline at end of file
+}
+
+void
+reattachstack(Monitor *m, int an, int ai)
+{
+ unsigned int i;
+ Client *c;
+
+ for (i = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), i++)
+ if (i >= ai && i < (ai + an)) {
+ detachstack(c);
+ attachstack(c);
+ }
+}
diff --git a/patch/flextile-deluxe.h b/patch/flextile-deluxe.h
index 919ac3c..b568b97 100644
--- a/patch/flextile-deluxe.h
+++ b/patch/flextile-deluxe.h
@@ -2,6 +2,7 @@ static void flextile(Monitor *m);
static void mirrorlayout(const Arg *arg);
static void rotatelayoutaxis(const Arg *arg);
static void incnstack(const Arg *arg);
+static void reattachstack(Monitor *m, int ai, int an);
/* Symbol handlers */
static void setflexsymbols(Monitor *m, unsigned int n);
diff --git a/patch/include.c b/patch/include.c
index 80be7d0..d8631fb 100644
--- a/patch/include.c
+++ b/patch/include.c
@@ -162,6 +162,9 @@
#include "xrdb.c"
#endif
/* Layouts */
+#if BSTACK_LAYOUT || BSTACKHORIZ_LAYOUT || CENTEREDMASTER_LAYOUT || CENTEREDFLOATINGMASTER_LAYOUT || COLUMNS_LAYOUT || DECK_LAYOUT || TILE_LAYOUT
+#include "layout_facts.c"
+#endif
#if BSTACK_LAYOUT
#include "bstack.c"
#endif
diff --git a/patch/layout_facts.c b/patch/layout_facts.c
new file mode 100644
index 0000000..bc0a97a
--- /dev/null
+++ b/patch/layout_facts.c
@@ -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 \ No newline at end of file
diff --git a/patch/tile.c b/patch/tile.c
index 3f03483..fa0b90a 100644
--- a/patch/tile.c
+++ b/patch/tile.c
@@ -1,56 +1,25 @@
-#if VANITYGAPS_PATCH && CFACTS_PATCH
static void
tile(Monitor *m)
{
unsigned int i, n;
int mx = 0, my = 0, mh = 0, mw = 0;
int sx = 0, sy = 0, sh = 0, sw = 0;
- int oh, ov, ih, iv;
float mfacts, sfacts;
+ int mrest, srest;
Client *c;
- getgaps(m, &oh, &ov, &ih, &iv, &n);
- getfacts(m, &mfacts, &sfacts);
-
- if (n == 0)
- return;
-
- sx = mx = m->wx + ov;
- sy = my = m->wy + oh;
- mh = m->wh - 2*oh - ih * (MIN(n, m->nmaster) - 1);
- sh = m->wh - 2*oh - ih * (n - m->nmaster - 1);
- sw = mw = m->ww - 2*ov;
-
- if (m->nmaster && n > m->nmaster) {
- sw = (mw - iv) * (1 - m->mfact);
- mw = (mw - iv) * m->mfact;
- sx = mx + mw + iv;
- }
- for (i = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), i++)
- if (i < m->nmaster) {
- resize(c, mx, my, mw - (2*c->bw), mh * (c->cfact / mfacts) - (2*c->bw), 0);
- my += HEIGHT(c) + ih;
- } else {
- resize(c, sx, sy, sw - (2*c->bw), sh * (c->cfact / sfacts) - (2*c->bw), 0);
- sy += HEIGHT(c) + ih;
- }
-}
-#elif VANITYGAPS_PATCH
-static void
-tile(Monitor *m)
-{
- unsigned int i, n;
- int mx = 0, my = 0, mh = 0, mw = 0;
- int sx = 0, sy = 0, sh = 0, sw = 0;
+ #if VANITYGAPS_PATCH
int oh, ov, ih, iv;
- 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;
+ #if VANITYGAPS_PATCH
sx = mx = m->wx + ov;
sy = my = m->wy + oh;
mh = m->wh - 2*oh - ih * (MIN(n, m->nmaster) - 1);
@@ -62,32 +31,7 @@ tile(Monitor *m)
mw = (mw - iv) * m->mfact;
sx = mx + mw + iv;
}
-
- for (i = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), i++)
- if (i < m->nmaster) {
- resize(c, mx, my, mw - (2*c->bw), mh / MIN(n, m->nmaster) - (2*c->bw), 0);
- my += HEIGHT(c) + ih;
- } else {
- resize(c, sx, sy, sw - (2*c->bw), sh / (n - MIN(n, m->nmaster)) - (2*c->bw), 0);
- sy += HEIGHT(c) + ih;
- }
-}
-#elif CFACTS_PATCH
-static void
-tile(Monitor *m)
-{
- unsigned int i, n;
- int mx = 0, my = 0, mh = 0, mw = 0;
- int sx = 0, sy = 0, sh = 0, sw = 0;
- float mfacts, sfacts;
- Client *c;
-
- for (n = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), n++);
- if (n == 0)
- return;
-
- getfacts(m, &mfacts, &sfacts);
-
+ #else
sx = mx = m->wx;
sy = my = m->wy;
sh = mh = m->wh;
@@ -98,40 +42,32 @@ tile(Monitor *m)
mw = mw * m->mfact;
sx = mx + mw;
}
+ #endif // VANITYGAPS_PATCH
+
+ getfacts(m, mh, sh, &mfacts, &sfacts, &mrest, &srest);
for (i = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), i++)
if (i < m->nmaster) {
- resize(c, mx, my, mw - (2*c->bw), mh * (c->cfact / mfacts) - (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 {
- resize(c, sx, sy, sw - (2*c->bw), sh * (c->cfact / sfacts) - (2*c->bw), 0);
+ #if CFACTS_PATCH
+ resize(c, sx, sy, sw - (2*c->bw), (sh / sfacts) * c->cfact + ((i - m->nmaster) < srest ? 1 : 0) - (2*c->bw), 0);
+ #else
+ resize(c, sx, sy, sw - (2*c->bw), (sh / sfacts) + ((i - m->nmaster) < srest ? 1 : 0) - (2*c->bw), 0);
+ #endif // CFACTS_PATCH
+ #if VANITYGAPS_PATCH
+ sy += HEIGHT(c) + ih;
+ #else
sy += HEIGHT(c);
+ #endif
}
-}
-#else
-void
-tile(Monitor *m)
-{
- unsigned int i, n, h, mw, my, ty;
- Client *c;
-
- for (n = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), n++);
- if (n == 0)
- return;
-
- if (n > m->nmaster)
- mw = m->nmaster ? m->ww * m->mfact : 0;
- else
- mw = m->ww;
- for (i = my = ty = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), i++)
- if (i < m->nmaster) {
- h = (m->wh - my) / (MIN(n, m->nmaster) - i);
- resize(c, m->wx, m->wy + my, mw - (2*c->bw), h - (2*c->bw), 0);
- my += HEIGHT(c);
- } else {
- h = (m->wh - ty) / (n - i);
- resize(c, m->wx + mw, m->wy + ty, m->ww - mw - (2*c->bw), h - (2*c->bw), 0);
- ty += HEIGHT(c);
- }
-}
-#endif
+} \ No newline at end of file