diff options
Diffstat (limited to 'patch')
| -rw-r--r-- | patch/fibonacci.c | 144 | ||||
| -rw-r--r-- | patch/fibonacci.h | 3 | ||||
| -rw-r--r-- | patch/include.c | 4 | ||||
| -rw-r--r-- | patch/include.h | 4 |
4 files changed, 155 insertions, 0 deletions
diff --git a/patch/fibonacci.c b/patch/fibonacci.c new file mode 100644 index 0000000..d989078 --- /dev/null +++ b/patch/fibonacci.c @@ -0,0 +1,144 @@ +#if VANITYGAPS_PATCH +static void +fibonacci(Monitor *m, int s) +{ + unsigned int i, n; + int nx, ny, nw, nh; + int oh, ov, ih, iv; + #if CFACTS_PATCH + float mfacts, sfacts; + #endif // CFACTS_PATCH + Client *c; + + #if CFACTS_PATCH + getgaps(m, &oh, &ov, &ih, &iv, &n, &mfacts, &sfacts); + #else + getgaps(m, &oh, &ov, &ih, &iv, &n); + #endif // CFACTS_PATCH + + if (n == 0) + return; + + nx = m->wx + ov; + ny = oh; + nw = m->ww - 2*ov; + 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 ((i % 4) == 2 && !s) + nx += nw + iv; + else if ((i % 4) == 3 && !s) + ny += nh + ih; + } + if ((i % 4) == 0) { + if (s) + ny += nh + ih; + else + ny -= nh + ih; + } + else if ((i % 4) == 1) + nx += nw + iv; + else if ((i % 4) == 2) + ny += nh + ih; + else if ((i % 4) == 3) { + if (s) + nx += nw + iv; + else + nx -= nw + iv; + } + if (i == 0) { + if (n != 1) + nw = (m->ww - 2*ov - iv) * m->mfact; + ny = m->wy + oh; + } + else if (i == 1) + nw = m->ww - nw - iv - 2*ov; + i++; + } + + resize(c, nx, ny, nw - (2*c->bw), nh - (2*c->bw), False); + } +} +#else +void +fibonacci(Monitor *mon, int s) +{ + unsigned int i, n, nx, ny, nw, nh; + Client *c; + + for (n = 0, c = nexttiled(mon->clients); c; c = nexttiled(c->next), n++); + if (n == 0) + return; + + nx = mon->wx; + ny = 0; + nw = mon->ww; + nh = mon->wh; + + 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) + ny += nh; + else + ny -= nh; + } + else if ((i % 4) == 1) + nx += nw; + else if ((i % 4) == 2) + ny += nh; + else if ((i % 4) == 3) { + if (s) + nx += nw; + else + nx -= nw; + } + if (i == 0) + { + if (n != 1) + nw = mon->ww * mon->mfact; + ny = mon->wy; + } + else if (i == 1) + nw = mon->ww - nw; + i++; + } + resize(c, nx, ny, nw - 2 * c->bw, nh - 2 * c->bw, False); + } +} +#endif + +#if FIBONACCI_DWINDLE_LAYOUT +static void +dwindle(Monitor *m) +{ + fibonacci(m, 1); +} +#endif + +#if FIBONACCI_SPIRAL_LAYOUT +static void +spiral(Monitor *m) +{ + fibonacci(m, 0); +} +#endif
\ No newline at end of file diff --git a/patch/fibonacci.h b/patch/fibonacci.h new file mode 100644 index 0000000..ee46fe7 --- /dev/null +++ b/patch/fibonacci.h @@ -0,0 +1,3 @@ +static void dwindle(Monitor *m); +static void fibonacci(Monitor *m, int s); +static void spiral(Monitor *m);
\ No newline at end of file diff --git a/patch/include.c b/patch/include.c index 3eedd7a..7dc0aac 100644 --- a/patch/include.c +++ b/patch/include.c @@ -66,6 +66,10 @@ #include "deck.c" #endif +#if FIBONACCI_DWINDLE_LAYOUT || FIBONACCI_SPIRAL_LAYOUT +#include "fibonacci.c" +#endif + #if MONOCLE_LAYOUT #include "monocle.c" #endif diff --git a/patch/include.h b/patch/include.h index 3618492..af229ea 100644 --- a/patch/include.h +++ b/patch/include.h @@ -62,6 +62,10 @@ #include "deck.h" #endif +#if FIBONACCI_DWINDLE_LAYOUT || FIBONACCI_SPIRAL_LAYOUT +#include "fibonacci.h" +#endif + #if MONOCLE_LAYOUT #include "monocle.h" #endif |
