From cd862e80cd7eed43f73c46375fb2fff43d34bac1 Mon Sep 17 00:00:00 2001 From: Uli Schlachter Date: Sun, 12 Jul 2009 20:27:41 +0200 Subject: [PATCH] Add fibanocci layouts ported from the C version This is based on the C code from commit b9320be372be84f8b9140fce62b77c7462490. Signed-off-by: Uli Schlachter Signed-off-by: Julien Danjou --- awesomerc.lua.in | 2 + lib/awful/layout/suit/init.lua.in | 1 + lib/awful/layout/suit/spiral.lua.in | 79 +++++++++++++++++++++++++++++ 3 files changed, 82 insertions(+) create mode 100644 lib/awful/layout/suit/spiral.lua.in diff --git a/awesomerc.lua.in b/awesomerc.lua.in index 4783c2fbb..53ae46f52 100644 --- a/awesomerc.lua.in +++ b/awesomerc.lua.in @@ -36,6 +36,8 @@ layouts = awful.layout.suit.tile.top, awful.layout.suit.fair, awful.layout.suit.fair.horizontal, + awful.layout.suit.spiral, + awful.layout.suit.spiral.dwindle, awful.layout.suit.max, awful.layout.suit.max.fullscreen, awful.layout.suit.magnifier, diff --git a/lib/awful/layout/suit/init.lua.in b/lib/awful/layout/suit/init.lua.in index ae83edf43..d5d4e3f25 100644 --- a/lib/awful/layout/suit/init.lua.in +++ b/lib/awful/layout/suit/init.lua.in @@ -3,6 +3,7 @@ require("awful.layout.suit.tile") require("awful.layout.suit.fair") require("awful.layout.suit.floating") require("awful.layout.suit.magnifier") +require("awful.layout.suit.spiral") --- Suits for awful module("awful.layout.suit") diff --git a/lib/awful/layout/suit/spiral.lua.in b/lib/awful/layout/suit/spiral.lua.in new file mode 100644 index 000000000..0c00644c2 --- /dev/null +++ b/lib/awful/layout/suit/spiral.lua.in @@ -0,0 +1,79 @@ +--------------------------------------------------------------------------- +-- @author Uli Schlachter <psychon@znc.in> +-- @copyright 2009 Uli Schlachter +-- @copyright 2008 Julien Danjou +-- @release @AWESOME_VERSION@ +--------------------------------------------------------------------------- + +-- Grab environment we need +local ipairs = ipairs + +module("awful.layout.suit.spiral") + +local function spiral(p, dwindle) + local wa = p.workarea + local cls = p.clients + + local i = 0 + local n = #cls + local nx = wa.x + local ny = wa.y + local nw = wa.width + local nh = wa.height + + for k, c in ipairs(cls) do + if (i % 2 == 1 and nh / 2 > 2 * c.border_width) + or (i % 2 == 0 and nw / 2 > 2 * c.border_width) then + if i < n - 1 then + if i % 2 == 1 then + nh = nh / 2 + else + nw = nw / 2 + end + if i % 4 == 2 and not dwindle then + nx = nx + nw + elseif i % 4 == 3 and not dwindle then + ny = ny + nh + end + end + if i % 4 == 0 then + if dwindle then + ny = ny + nh + else + ny = ny - nh + end + elseif i % 4 == 1 then + nx = nx + nw + elseif i % 4 == 2 then + ny = ny + nh + elseif i % 4 == 3 then + if dwindle then + nx = nx + nw + else + nx = nx - nw + end + end + if i == 0 then + ny = wa.y + end + i = i + 1 + end + local geom = { x = nx, y = ny, width = nw, height = nh } + c:geometry(geom) + end +end + +--- Dwindle layout +dwindle = {} +dwindle.name = "dwindle" +function dwindle.arrange(p) + return spiral(p, true) +end + +--- Spiral layout +name = "spiral" +function arrange(p) + return spiral(p, false) +end + +-- vim: filetype=lua:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:encoding=utf-8:textwidth=80