summaryrefslogtreecommitdiffhomepage
path: root/patch
diff options
context:
space:
mode:
authorbakkeby <[email protected]>2020-05-10 10:31:11 +0200
committerbakkeby <[email protected]>2020-05-10 10:31:11 +0200
commit1508d9f2744f153d4037aa9119ba37b173bad174 (patch)
tree4bc658d663a79fafa57d8765f211ff52e751792d /patch
parentc65315d52ffab56801876756140907a0a628748c (diff)
downloaddwm-flexipatch-1508d9f2744f153d4037aa9119ba37b173bad174.tar.gz
dwm-flexipatch-1508d9f2744f153d4037aa9119ba37b173bad174.zip
Fibonacci pixel perfect updates
Diffstat (limited to 'patch')
-rw-r--r--patch/fibonacci.c143
1 files changed, 98 insertions, 45 deletions
diff --git a/patch/fibonacci.c b/patch/fibonacci.c
index a8f3a06..87a1bdf 100644
--- a/patch/fibonacci.c
+++ b/patch/fibonacci.c
@@ -1,14 +1,14 @@
#if VANITYGAPS_PATCH
-static void
+void
fibonacci(Monitor *m, int s)
{
unsigned int i, n;
int nx, ny, nw, nh;
int oh, ov, ih, iv;
+ int nv, hrest = 0, wrest = 0, r = 1;
Client *c;
getgaps(m, &oh, &ov, &ih, &iv, &n);
-
if (n == 0)
return;
@@ -18,38 +18,63 @@ fibonacci(Monitor *m, int s)
nh = m->wh - 2*oh;
for (i = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next)) {
- if ((i % 2 && nh / 2 > 2*c->bw)
- || (!(i % 2) && nw / 2 > 2*c->bw)) {
- if (i < n - 1) {
- if (i % 2)
- nh = (nh - ih) / 2;
- else
- nw = (nw - iv) / 2;
+ if (r) {
+ if ((i % 2 && (nh - ih) / 2 <= (bh + 2*c->bw))
+ || (!(i % 2) && (nw - iv) / 2 <= (bh + 2*c->bw))) {
+ r = 0;
+ }
+ if (r && i < n - 1) {
+ if (i % 2) {
+ nv = (nh - ih) / 2;
+ hrest = nh - 2*nv - ih;
+ nh = nv;
+ } else {
+ nv = (nw - iv) / 2;
+ wrest = nw - 2*nv - iv;
+ nw = nv;
+ }
if ((i % 4) == 2 && !s)
nx += nw + iv;
else if ((i % 4) == 3 && !s)
ny += nh + ih;
}
+
if ((i % 4) == 0) {
- if (s)
+ if (s) {
ny += nh + ih;
- else
+ nh += hrest;
+ }
+ else {
+ nh -= hrest;
ny -= nh + ih;
+ }
}
- else if ((i % 4) == 1)
+ else if ((i % 4) == 1) {
nx += nw + iv;
- else if ((i % 4) == 2)
+ nw += wrest;
+ }
+ else if ((i % 4) == 2) {
ny += nh + ih;
+ nh += hrest;
+ if (i < n - 1)
+ nw += wrest;
+ }
else if ((i % 4) == 3) {
- if (s)
+ if (s) {
nx += nw + iv;
- else
+ nw -= wrest;
+ } else {
+ nw -= wrest;
nx -= nw + iv;
+ nh += hrest;
+ }
}
if (i == 0) {
- if (n != 1)
- nw = (m->ww - 2*ov - iv) * m->mfact;
+ if (n != 1) {
+ nw = (m->ww - iv - 2*ov) - (m->ww - iv - 2*ov) * (1 - m->mfact);
+ wrest = 0;
+ }
ny = m->wy + oh;
}
else if (i == 1)
@@ -62,60 +87,88 @@ fibonacci(Monitor *m, int s)
}
#else
void
-fibonacci(Monitor *mon, int s)
+fibonacci(Monitor *m, int s)
{
- unsigned int i, n, nx, ny, nw, nh;
+ unsigned int i, n;
+ int nx, ny, nw, nh;
+ int nv, hrest = 0, wrest = 0, r = 1;
Client *c;
- for (n = 0, c = nexttiled(mon->clients); c; c = nexttiled(c->next), n++);
+ for (n = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), n++);
if (n == 0)
return;
- nx = mon->wx;
- ny = 0;
- nw = mon->ww;
- nh = mon->wh;
+ nx = m->wx;
+ ny = m->wy;
+ nw = m->ww;
+ nh = m->wh;
+
+ for (i = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next)) {
+ if (r) {
+ if ((i % 2 && nh / 2 <= (bh + 2*c->bw))
+ || (!(i % 2) && nw / 2 <= (bh + 2*c->bw))) {
+ r = 0;
+ }
+ if (r && i < n - 1) {
+ if (i % 2) {
+ nv = nh / 2;
+ hrest = nh - 2*nv;
+ nh = nv;
+ } else {
+ nv = nw / 2;
+ wrest = nw - 2*nv;
+ nw = nv;
+ }
- for (i = 0, c = nexttiled(mon->clients); c; c = nexttiled(c->next)) {
- if ((i % 2 && nh / 2 > 2 * c->bw)
- || (!(i % 2) && nw / 2 > 2 * c->bw)) {
- if (i < n - 1) {
- if (i % 2)
- nh /= 2;
- else
- nw /= 2;
if ((i % 4) == 2 && !s)
nx += nw;
else if ((i % 4) == 3 && !s)
ny += nh;
}
+
if ((i % 4) == 0) {
- if (s)
+ if (s) {
ny += nh;
- else
+ nh += hrest;
+ }
+ else {
+ nh -= hrest;
ny -= nh;
+ }
}
- else if ((i % 4) == 1)
+ else if ((i % 4) == 1) {
nx += nw;
- else if ((i % 4) == 2)
+ nw += wrest;
+ }
+ else if ((i % 4) == 2) {
ny += nh;
+ nh += hrest;
+ if (i < n - 1)
+ nw += wrest;
+ }
else if ((i % 4) == 3) {
- if (s)
+ if (s) {
nx += nw;
- else
+ nw -= wrest;
+ } else {
+ nw -= wrest;
nx -= nw;
+ nh += hrest;
+ }
}
- if (i == 0)
- {
- if (n != 1)
- nw = mon->ww * mon->mfact;
- ny = mon->wy;
+ if (i == 0) {
+ if (n != 1) {
+ nw = m->ww - m->ww * (1 - m->mfact);
+ wrest = 0;
+ }
+ ny = m->wy;
}
else if (i == 1)
- nw = mon->ww - nw;
+ nw = m->ww - nw;
i++;
}
- resize(c, nx, ny, nw - 2 * c->bw, nh - 2 * c->bw, False);
+
+ resize(c, nx, ny, nw - (2*c->bw), nh - (2*c->bw), False);
}
}
#endif