layouts: spiral: Avoid gaps between windows
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 <fabiduc@gmail.com> Signed-off-by: Uli Schlachter <psychon@znc.in>
This commit is contained in:
parent
7adc21e2ca
commit
94a8c72596
|
@ -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
|
||||
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.width = wa.width / 2
|
||||
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 = {
|
||||
|
|
Loading…
Reference in New Issue