From 94a8c725968535fd74fe399846f193ecc6ce4c29 Mon Sep 17 00:00:00 2001 From: Fabienne Ducroquet Date: Sat, 18 Jan 2014 16:12:30 +0100 Subject: [PATCH] layouts: spiral: Avoid gaps between windows MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit When an area is split in two, for example horizontally, one of the windows should have height math.floor(previous height / 2) and the other math.ceil(previous height / 2), to be certain that no gaps are left between the windows. For instance, if the first window has height h and the second window has height math.floor(h / 2), the height of the third window should be math.ceil(h / 2) instead of the same as for the second window. So to compute the size of window n + 1 it’s necessary to remember the size of window n - 1 as well as that of window n. Signed-off-by: Fabienne Ducroquet Signed-off-by: Uli Schlachter --- lib/awful/layout/suit/spiral.lua.in | 30 +++++++++++++++++++----------- 1 file changed, 19 insertions(+), 11 deletions(-) diff --git a/lib/awful/layout/suit/spiral.lua.in b/lib/awful/layout/suit/spiral.lua.in index f96a7d17..188977cb 100644 --- a/lib/awful/layout/suit/spiral.lua.in +++ b/lib/awful/layout/suit/spiral.lua.in @@ -7,6 +7,7 @@ -- Grab environment we need local ipairs = ipairs +local math = math -- awful.layout.suit.spiral local spiral = {} @@ -15,28 +16,35 @@ local function do_spiral(p, _spiral) local wa = p.workarea local cls = p.clients local n = #cls + local old_width, old_height = wa.width, 2 * wa.height for k, c in ipairs(cls) do - if k < n then - if k % 2 == 0 then - wa.height = wa.height / 2 - else - wa.width = wa.width / 2 + if k % 2 == 0 then + wa.width, old_width = math.ceil(old_width / 2), wa.width + if k ~= n then + wa.height, old_height = math.floor(wa.height / 2), wa.height + end + else + wa.height, old_height = math.ceil(old_height / 2), wa.height + if k ~= n then + wa.width, old_width = math.floor(wa.width / 2), wa.width end end if k % 4 == 0 and _spiral then wa.x = wa.x - wa.width - elseif k % 2 == 0 or - (k % 4 == 3 and k < n and _spiral) then - wa.x = wa.x + wa.width + elseif k % 2 == 0 then + wa.x = wa.x + old_width + elseif k % 4 == 3 and k < n and _spiral then + wa.x = wa.x + math.ceil(old_width / 2) end if k % 4 == 1 and k ~= 1 and _spiral then wa.y = wa.y - wa.height - elseif k % 2 == 1 and k ~= 1 or - (k % 4 == 0 and k < n and _spiral) then - wa.y = wa.y + wa.height + elseif k % 2 == 1 and k ~= 1 then + wa.y = wa.y + old_height + elseif k % 4 == 0 and k < n and _spiral then + wa.y = wa.y + math.ceil(old_height / 2) end local g = { -- 2.11.4.GIT