From 1508d9f2744f153d4037aa9119ba37b173bad174 Mon Sep 17 00:00:00 2001 From: bakkeby Date: Sun, 10 May 2020 10:31:11 +0200 Subject: [PATCH] Fibonacci pixel perfect updates --- patch/fibonacci.c | 143 +++++++++++++++++++++++++++++++--------------- 1 file 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