]> git.madduck.net Git - etc/awesome.git/blobdiff - layout/centerwork.lua

madduck's git repository

Every one of the projects in this repository is available at the canonical URL git://git.madduck.net/madduck/pub/<projectpath> — see each project's metadata for the exact URL.

All patches and comments are welcome. Please squash your changes to logical commits before using git-format-patch and git-send-email to patches@git.madduck.net. If you'd read over the Git project's submission guidelines and adhered to them, I'd be especially grateful.

SSH access, as well as push access can be individually arranged.

If you use my repositories frequently, consider adding the following snippet to ~/.gitconfig and using the third clone URL listed for each project:

[url "git://git.madduck.net/madduck/"]
  insteadOf = madduck:

helpers: improved i/o functions
[etc/awesome.git] / layout / centerwork.lua
index aff27710dc8d31a208fad53200499de762431f9e..cb8370933b660ae496cf562780f7c477f871f4f4 100644 (file)
@@ -4,30 +4,28 @@
       * (c) 2016,      Henrik Antonsson
       * (c) 2015,      Joerg Jaspert
       * (c) 2014,      projektile
       * (c) 2016,      Henrik Antonsson
       * (c) 2015,      Joerg Jaspert
       * (c) 2014,      projektile
-      * (c) 2013,      Luke Bonham
+      * (c) 2013,      Luca CPZ
       * (c) 2010-2012, Peter Hofmann
 
 --]]
 
       * (c) 2010-2012, Peter Hofmann
 
 --]]
 
-local floor  = math.floor
-local screen = screen
+local floor, max, screen = math.floor, math.max, screen
 
 local centerwork = {
 
 local centerwork = {
-    name         = "centerwork",
-    horizontal   = { name = "centerworkh" }
+    name       = "centerwork",
+    horizontal = { name = "centerworkh" }
 }
 
 }
 
-local function do_centerwork(p, orientation)
-    local t = p.tag or screen[p.screen].selected_tag
-    local wa = p.workarea
+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
 
     local cls = p.clients
 
     if #cls == 0 then return end
 
-    local c = cls[1]
-    local g = {}
+    local c, g = cls[1], {}
 
 
-    -- Main column, fixed width and height.
+    -- 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 mwfact          = t.master_width_factor
     local mainhei         = floor(wa.height * mwfact)
     local mainwid         = floor(wa.width * mwfact)
@@ -42,7 +40,7 @@ local function do_centerwork(p, orientation)
 
     local slaveFirstDim, slaveSecondDim = 0, 0
 
 
     local slaveFirstDim, slaveSecondDim = 0, 0
 
-    if orientation == "vertical" then
+    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
 
         if nbrFirstSlaves  > 0 then slaveFirstDim  = floor(wa.height / nbrFirstSlaves) end
         if nbrSecondSlaves > 0 then slaveSecondDim = floor(wa.height / nbrSecondSlaves) end
 
@@ -51,7 +49,7 @@ local function do_centerwork(p, orientation)
 
         g.x = wa.x + slaveLwid
         g.y = wa.y
 
         g.x = wa.x + slaveLwid
         g.y = wa.y
-    else
+    else -- horizontal
         if nbrFirstSlaves  > 0 then slaveFirstDim  = floor(wa.width / nbrFirstSlaves) end
         if nbrSecondSlaves > 0 then slaveSecondDim = floor(wa.width / nbrSecondSlaves) end
 
         if nbrFirstSlaves  > 0 then slaveFirstDim  = floor(wa.width / nbrFirstSlaves) end
         if nbrSecondSlaves > 0 then slaveSecondDim = floor(wa.width / nbrSecondSlaves) end
 
@@ -62,92 +60,76 @@ local function do_centerwork(p, orientation)
         g.y = wa.y + slaveThei
     end
 
         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)
 
     p.geometries[c] = g
 
 
     p.geometries[c] = g
 
-    -- Auxiliary windows.
+    -- Auxiliary clients
     if #cls <= 1 then return end
     if #cls <= 1 then return end
-    for i = 2,#cls do
-        local c = cls[i]
-        local g = {}
+    for i = 2, #cls do
+        local c, g = cls[i], {}
+        local idxChecker, dimToAssign
 
         local rowIndex = floor(i/2)
 
 
         local rowIndex = floor(i/2)
 
-        if orientation == "vertical" then
-            if i % 2 == 0 then
-                -- left slave
-                g.x = wa.x
-                g.y = wa.y + (rowIndex-1)*slaveFirstDim
-
+        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
 
                 g.width = slaveLwid
 
-                -- if last slave in left row use remaining space for that slave
-                if rowIndex == nbrFirstSlaves then
-                    g.height = wa.y + wa.height - g.y
-                else
-                    g.height = slaveFirstDim
-                end
-            else
-                -- right slave
-                g.x = wa.x + slaveLwid + mainwid
-                g.y = wa.y + (rowIndex-1)*slaveSecondDim
-
+                idxChecker, dimToAssign = nbrFirstSlaves, slaveFirstDim
+            else -- right slave
+                g.x     = wa.x + slaveLwid + mainwid
+                g.y     = wa.y + (rowIndex - 1) * slaveSecondDim
                 g.width = slaveRwid
 
                 g.width = slaveRwid
 
-                -- if last slave in right row use remaining space for that slave
-                if rowIndex == nbrSecondSlaves then
-                    g.height = wa.y + wa.height - g.y
-                else
-                    g.height = slaveSecondDim
-                end
+                idxChecker, dimToAssign = nbrSecondSlaves, slaveSecondDim
             end
             end
-        else
-            if i % 2 == 0 then
-                -- top slave
-                g.x = wa.x + (rowIndex-1)*slaveFirstDim
-                g.y = wa.y
 
 
-                g.height = slaveThei
-
-                -- if last slave in top row use remaining space for that slave
-                if rowIndex == nbrFirstSlaves then
-                    g.width = wa.x + wa.width - g.x
-                else
-                    g.width = slaveFirstDim
-                end
+            -- if last slave in row, use remaining space for it
+            if rowIndex == idxChecker then
+                g.height = wa.y + wa.height - g.y
             else
             else
-                -- bottom slave
-                g.x = wa.x + (rowIndex-1)*slaveSecondDim
-                g.y = wa.y + slaveThei + mainhei
+                g.height = dimToAssign
+            end
+        else
+            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
 
                 g.height = slaveBhei
 
-                -- if last slave in bottom row use remaining space for that slave
-                if rowIndex == nbrSecondSlaves then
-                    g.width = wa.x + wa.width - g.x
-                else
-                    g.width = slaveSecondDim
-                end
+                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
 
             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)
 
         p.geometries[c] = g
     end
 end
 
 
         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
 
 end
 
-function centerwork.arrange(p)
-    return do_centerwork(p, "vertical")
+function centerwork.horizontal.arrange(p)
+    return arrange(p, centerwork.horizontal)
 end
 
 return centerwork
 end
 
 return centerwork