X-Git-Url: https://git.madduck.net/etc/awesome.git/blobdiff_plain/430e70670c3f0a38c1c300273784096aeb8728cd..92d17d289c64eb8416a881e4fe0113a64b534003:/layout/centerwork.lua

diff --git a/layout/centerwork.lua b/layout/centerwork.lua
index ce3d9e8..cb83709 100644
--- a/layout/centerwork.lua
+++ b/layout/centerwork.lua
@@ -1,158 +1,135 @@
-
 --[[
-                                                  
-     Licensed under GNU General Public License v2 
-      * (c) 2016,      Henrik Antonsson           
-      * (c) 2015,      Joerg Jaspert              
-      * (c) 2014,      projektile                 
-      * (c) 2013,      Luke Bonham                
-      * (c) 2010-2012, Peter Hofmann              
-                                                  
+
+     Licensed under GNU General Public License v2
+      * (c) 2016,      Henrik Antonsson
+      * (c) 2015,      Joerg Jaspert
+      * (c) 2014,      projektile
+      * (c) 2013,      Luca CPZ
+      * (c) 2010-2012, Peter Hofmann
+
 --]]
 
-local tag       = require("awful.tag")
-local tonumber  = tonumber
-local math      = { floor = math.floor }
+local floor, max, screen = math.floor, math.max, screen
 
 local centerwork = {
-    name         = "centerwork",
-    horizontal   = { name = "centerworkh" }
+    name       = "centerwork",
+    horizontal = { name = "centerworkh" }
 }
 
-local function do_centerwork(p, orientation)
-    -- Screen.
+local function arrange(p, layout)
+    local t   = p.tag or screen[p.screen].selected_tag
     local wa  = p.workarea
     local cls = p.clients
 
-    if #cls <= 0 then return end
+    if #cls == 0 then return end
 
-    -- Useless gaps.
-    local useless_gap = tag.gap or 0
+    local c, g = cls[1], {}
 
-    local c = cls[1]
-    local g = {}
-
-    -- Main column, fixed width and height.
-    local mwfact          = tag.object.get_master_width_factor(t)
-    local mainhei         = math.floor(wa.height * mwfact)
-    local mainwid         = math.floor(wa.width * mwfact)
+    -- Main column, fixed width and height
+    local mwfact          = t.master_width_factor
+    local mainhei         = floor(wa.height * mwfact)
+    local mainwid         = floor(wa.width * mwfact)
     local slavewid        = wa.width - mainwid
-    local slaveLwid       = math.floor(slavewid / 2)
+    local slaveLwid       = floor(slavewid / 2)
     local slaveRwid       = slavewid - slaveLwid
     local slavehei        = wa.height - mainhei
-    local slaveThei       = math.floor(slavehei / 2)
+    local slaveThei       = floor(slavehei / 2)
     local slaveBhei       = slavehei - slaveThei
-    local nbrFirstSlaves  = math.floor(#cls / 2)
-    local nbrSecondSlaves = math.floor((#cls - 1) / 2)
+    local nbrFirstSlaves  = floor(#cls / 2)
+    local nbrSecondSlaves = floor((#cls - 1) / 2)
 
     local slaveFirstDim, slaveSecondDim = 0, 0
 
-    if orientation == "vertical" then
-        if nbrFirstSlaves  > 0 then slaveFirstDim  = math.floor(wa.height / nbrFirstSlaves) end
-        if nbrSecondSlaves > 0 then slaveSecondDim = math.floor(wa.height / nbrSecondSlaves) end
+    if layout.name == "centerwork" then -- vertical
+        if nbrFirstSlaves  > 0 then slaveFirstDim  = floor(wa.height / nbrFirstSlaves) end
+        if nbrSecondSlaves > 0 then slaveSecondDim = floor(wa.height / nbrSecondSlaves) end
 
-        g.height = wa.height - 2*useless_gap - 2*c.border_width
-        g.width  = mainwid - 2*c.border_width
+        g.height = wa.height
+        g.width  = mainwid
 
         g.x = wa.x + slaveLwid
-        g.y = wa.y + useless_gap
-    else
-        if nbrFirstSlaves  > 0 then slaveFirstDim  = math.floor(wa.width / nbrFirstSlaves) end
-        if nbrSecondSlaves > 0 then slaveSecondDim = math.floor(wa.width / nbrSecondSlaves) end
+        g.y = wa.y
+    else -- horizontal
+        if nbrFirstSlaves  > 0 then slaveFirstDim  = floor(wa.width / nbrFirstSlaves) end
+        if nbrSecondSlaves > 0 then slaveSecondDim = floor(wa.width / nbrSecondSlaves) end
 
-        g.height  = mainhei - 2*c.border_width
-        g.width = wa.width - 2*useless_gap - 2*c.border_width
+        g.height  = mainhei
+        g.width = wa.width
 
-        g.x = wa.x + useless_gap
+        g.x = wa.x
         g.y = wa.y + slaveThei
     end
 
-    if g.width  < 1 then g.width  = 1 end
-    if g.height < 1 then g.height = 1 end
+    g.width  = max(g.width, 1)
+    g.height = max(g.height, 1)
 
-    c:geometry(g)
+    p.geometries[c] = g
 
-    -- Auxiliary windows.
+    -- Auxiliary clients
     if #cls <= 1 then return end
-    for i = 2,#cls do
-        local c = cls[i]
-        local g = {}
-
-        local rowIndex = math.floor(i/2)
-
-        if orientation == "vertical" then
-            if i % 2 == 0 then
-                -- left slave
-                g.x = wa.x + useless_gap
-                g.y = wa.y + useless_gap + (rowIndex-1)*slaveFirstDim
-
-                g.width = slaveLwid - 2*useless_gap - 2*c.border_width
-
-                -- if last slave in left row use remaining space for that slave
-                if rowIndex == nbrFirstSlaves then
-                    g.height = wa.y + wa.height - g.y - useless_gap - 2*c.border_width
-                else
-                    g.height = slaveFirstDim - useless_gap - 2*c.border_width
-                end
+    for i = 2, #cls do
+        local c, g = cls[i], {}
+        local idxChecker, dimToAssign
+
+        local rowIndex = floor(i/2)
+
+        if layout.name == "centerwork" then
+            if i % 2 == 0 then -- left slave
+                g.x     = wa.x
+                g.y     = wa.y + (rowIndex - 1) * slaveFirstDim
+                g.width = slaveLwid
+
+                idxChecker, dimToAssign = nbrFirstSlaves, slaveFirstDim
+            else -- right slave
+                g.x     = wa.x + slaveLwid + mainwid
+                g.y     = wa.y + (rowIndex - 1) * slaveSecondDim
+                g.width = slaveRwid
+
+                idxChecker, dimToAssign = nbrSecondSlaves, slaveSecondDim
+            end
+
+            -- if last slave in row, use remaining space for it
+            if rowIndex == idxChecker then
+                g.height = wa.y + wa.height - g.y
             else
-                -- right slave
-                g.x = wa.x + slaveLwid + mainwid + useless_gap
-                g.y = wa.y + useless_gap + (rowIndex-1)*slaveSecondDim
-
-                g.width = slaveRwid - 2*useless_gap - 2*c.border_width
-
-                -- if last slave in right row use remaining space for that slave
-                if rowIndex == nbrSecondSlaves then
-                    g.height = wa.y + wa.height - g.y - useless_gap - 2*c.border_width
-                else
-                    g.height = slaveSecondDim - useless_gap - 2*c.border_width
-                end
+                g.height = dimToAssign
             end
         else
-            if i % 2 == 0 then
-                -- top slave
-                g.x = wa.x + useless_gap + (rowIndex-1)*slaveFirstDim
-                g.y = wa.y + useless_gap
-
-                g.height = slaveThei - 2*useless_gap - 2*c.border_width
-
-                -- if last slave in top row use remaining space for that slave
-                if rowIndex == nbrFirstSlaves then
-                    g.width = wa.x + wa.width - g.x - useless_gap - 2*c.border_width
-                else
-                    g.width = slaveFirstDim - useless_gap - 2*c.border_width
-                end
-            else
-                -- bottom slave
-                g.x = wa.x + useless_gap + (rowIndex-1)*slaveFirstDim
-                g.y = wa.y + slaveThei + mainhei + useless_gap
-
-                g.height = slaveBhei - 2*useless_gap - 2*c.border_width
-
-                -- if last slave in bottom row use remaining space for that slave
-                if rowIndex == nbrSecondSlaves then
-                    g.width = wa.x + wa.width - g.x - useless_gap - 2*c.border_width
-                else
-                    g.width = slaveSecondDim - useless_gap - 2*c.border_width
-                end
+            if i % 2 == 0 then -- top slave
+                g.x      = wa.x + (rowIndex - 1) * slaveFirstDim
+                g.y      = wa.y
+                g.height = slaveThei
+
+                idxChecker, dimToAssign = nbrFirstSlaves, slaveFirstDim
+            else -- bottom slave
+                g.x      = wa.x + (rowIndex - 1) * slaveSecondDim
+                g.y      = wa.y + slaveThei + mainhei
+                g.height = slaveBhei
+
+                idxChecker, dimToAssign = nbrSecondSlaves, slaveSecondDim
+            end
 
+            -- if last slave in row, use remaining space for it
+            if rowIndex == idxChecker then
+                g.width = wa.x + wa.width - g.x
+            else
+                g.width = dimToAssign
             end
         end
 
-        if g.width  < 1 then g.width  = 1 end
-        if g.height < 1 then g.height = 1 end
+        g.width  = max(g.width, 1)
+        g.height = max(g.height, 1)
 
-        c:geometry(g)
+        p.geometries[c] = g
     end
 end
 
-
-function centerwork.horizontal.arrange(p)
-    return do_centerwork(p, "horizontal")
+function centerwork.arrange(p)
+    return arrange(p, centerwork)
 end
 
-function centerwork.arrange(p)
-    return do_centerwork(p, "vertical")
+function centerwork.horizontal.arrange(p)
+    return arrange(p, centerwork.horizontal)
 end
 
 return centerwork