X-Git-Url: https://git.madduck.net/etc/awesome.git/blobdiff_plain/5318966270d86d52a2b9d7244b9336544a946d85..f4870b8858835726ea6f6562a0a3d7e092425595:/layout/termfair.lua?ds=inline

diff --git a/layout/termfair.lua b/layout/termfair.lua
index 26a7130..33b7ffc 100644
--- a/layout/termfair.lua
+++ b/layout/termfair.lua
@@ -9,27 +9,21 @@
                                                   
 --]]
 
-local scr      = require("awful.screen")
 local math     = { ceil  = math.ceil,
                    floor = math.floor,
                    max   = math.max }
+local screen   = screen
 local tonumber = tonumber
 
 local termfair  = { name = "termfair" }
 termfair.center = { name = "centerfair" }
 
 local function do_fair(p, orientation)
-    -- Screen.
-    local wa  = p.workarea
+    local t = p.tag or screen[p.screen].selected_tag
+    local wa = p.workarea
     local cls = p.clients
-    local ta = scr.focused().selected_tag
 
-    if not ta then return end
-
-    if #cls <= 0 then return end
-
-    -- Useless gaps.
-    local useless_gap = p.useless_gap or 0
+    if #cls == 0 then return end
 
     if orientation == "west" then
         -- Layout with fixed number of vertical columns (read from nmaster).
@@ -50,18 +44,16 @@ local function do_fair(p, orientation)
         --   | 3 | 2 | 1 |      | 3 | 2 | 1 |      | 3 | 2 | 1 |
         --   +---+---+---+      +---+---+---+      +---+---+---+
 
-        if #cls <= 0 then return end
-
         -- How many vertical columns? Read from nmaster on the tag.
-        local num_x = tonumber(termfair.nmaster) or ta.master_count
-        local ncol  = tonumber(termfair.ncol) or ta.column_count
+        local num_x = tonumber(termfair.nmaster) or t.master_count
+        local ncol  = tonumber(termfair.ncol) or t.column_count
 
         if num_x <= 2 then num_x = 2 end
         if ncol  <= 1 then ncol  = 1 end
-        local width = math.floor((wa.width - (num_x + 1)*useless_gap) / num_x)
+        local width = math.floor(wa.width/num_x)
 
         local num_y     = math.max(math.ceil(#cls / num_x), ncol)
-        local height    = math.floor((wa.height - (num_y + 1)*useless_gap) / num_y)
+        local height    = math.floor(wa.height/num_y)
         local cur_num_x = num_x
         local at_x      = 0
         local at_y      = 0
@@ -84,30 +76,24 @@ local function do_fair(p, orientation)
             -- Calculate geometry.
             local g = {}
             if this_x == (num_x - 1) then
-                g.width = wa.width - (num_x - 1)*width - (num_x + 1)*useless_gap - 2*c.border_width
+                g.width = wa.width - (num_x - 1)*width
             else
-                g.width = width - 2*c.border_width
+                g.width = width
             end
 
             if this_y == (num_y - 1) then
-                g.height = wa.height - (num_y - 1)*height - (num_y + 1)*useless_gap - 2*c.border_width
+                g.height = wa.height - (num_y - 1)*height
             else
-                g.height = height - 2*c.border_width
+                g.height = height
             end
 
             g.x = wa.x + this_x*width
             g.y = wa.y + this_y*height
 
-            if useless_gap > 0 then
-                -- All clients tile evenly.
-                g.x = g.x + (this_x + 1)*useless_gap
-                g.y = g.y + (this_y + 1)*useless_gap
-            end
-
-            if g.width < 1 then g.width = 1 end
+            if g.width  < 1 then g.width  = 1 end
             if g.height < 1 then g.height = 1 end
 
-            c:geometry(g)
+            p.geometries[c] = g
 
             remaining_clients = remaining_clients - 1
 
@@ -146,100 +132,98 @@ local function do_fair(p, orientation)
         --   +---+---+---+      +---+---+---+
 
         -- How many vertical columns? Read from nmaster on the tag.
-        local num_x = tonumber(termfair.center.nmaster) or ta.master_count
-        local ncol  = tonumber(termfair.center.ncol) or ta.column_count
+        local num_x = tonumber(termfair.center.nmaster) or t.master_count
+        local ncol  = tonumber(termfair.center.ncol) or t.column_count
 
         if num_x <= 2 then num_x = 2 end
         if ncol  <= 1 then ncol  = 1 end
 
-        local width = math.floor((wa.width - (num_x + 1)*useless_gap) / num_x)
+        local width = math.floor(wa.width / num_x)
 
         if #cls < num_x then
             -- Less clients than the number of columns, let's center it!
-            local offset_x = wa.x + (wa.width - #cls*width - (#cls - 1)*useless_gap) / 2
-            local g = {}
-            g.y = wa.y + useless_gap
+            local offset_x = wa.x + (wa.width - #cls*width) / 2
             for i = 1, #cls do
-                local c = cls[i]
-                g.width = width - 2*c.border_width
-                g.height = wa.height - 2*useless_gap - 2*c.border_width
+                local g = { y = wa.y }
+                g.width  = width
+                g.height = wa.height
                 if g.width < 1 then g.width = 1 end
                 if g.height < 1 then g.height = 1 end
-                g.x = offset_x + (i - 1) * (width + useless_gap)
-                c:geometry(g)
+                g.x = offset_x + (i - 1) * width
+                p.geometries[cls[i]] = g
             end
         else
             -- More clients than the number of columns, let's arrange it!
             -- Master client deserves a special treatement
-            local c = cls[1]
             local g = {}
-            g.width = wa.width - (num_x - 1)*width - (num_x + 1)*useless_gap - 2*c.border_width
-            g.height = wa.height - 2*useless_gap - 2*c.border_width
+            g.width = wa.width - (num_x - 1)*width
+            g.height = wa.height
             if g.width < 1 then g.width = 1 end
             if g.height < 1 then g.height = 1 end
-            g.x = wa.x + useless_gap
-            g.y = wa.y + useless_gap
-
-            c:geometry(g)
+            g.x = wa.x
+            g.y = wa.y
+            p.geometries[cls[1]] = g
 
             -- Treat the other clients
 
             -- Compute distribution of clients among columns
-            local num_y ={}
-            do
-                local remaining_clients = #cls-1
-                local ncol_min = math.ceil(remaining_clients/(num_x-1))
-                if ncol >= ncol_min then
-                    for i = (num_x-1), 1, -1 do
-                        if (remaining_clients-i+1) < ncol then
-                            num_y[i] = remaining_clients-i + 1
-                        else
-                            num_y[i] = ncol
-                        end
-                        remaining_clients = remaining_clients - num_y[i]
+            local num_y = {}
+            local remaining_clients = #cls-1
+            local ncol_min = math.ceil(remaining_clients/(num_x-1))
+
+            if ncol >= ncol_min then
+                for i = (num_x-1), 1, -1 do
+                    if (remaining_clients-i+1) < ncol then
+                        num_y[i] = remaining_clients-i + 1
+                    else
+                        num_y[i] = ncol
+                    end
+                    remaining_clients = remaining_clients - num_y[i]
+                end
+            else
+                local rem = remaining_clients % (num_x-1)
+                if rem == 0 then
+                    for i = 1, num_x-1 do
+                        num_y[i] = ncol_min
                     end
                 else
-                    local rem = remaining_clients % (num_x-1)
-                    if rem == 0 then
-                        for i = 1, num_x-1 do
-                            num_y[i] = ncol_min
-                        end
-                    else
-                        for i = 1, num_x-1 do
-                            num_y[i] = ncol_min - 1
-                        end
-                        for i = 0, rem-1 do
-                            num_y[num_x-1-i] = num_y[num_x-1-i] + 1
-                        end
+                    for i = 1, num_x-1 do
+                        num_y[i] = ncol_min - 1
+                    end
+                    for i = 0, rem-1 do
+                        num_y[num_x-1-i] = num_y[num_x-1-i] + 1
                     end
                 end
             end
 
             -- Compute geometry of the other clients
             local nclient = 2 -- we start with the 2nd client
-            g.x = g.x + g.width + useless_gap + 2*c.border_width
-
+            local wx = g.x + g.width
             for i = 1, (num_x-1) do
-                local height = math.floor((wa.height - (num_y[i] + 1)*useless_gap) / num_y[i])
-                g.y = wa.y + useless_gap
+                local height = math.floor(wa.height / num_y[i])
+                local wy = wa.y
                 for j = 0, (num_y[i]-2) do
-                    local c = cls[nclient]
-                    g.height = height - 2*c.border_width
-                    g.width = width - 2*c.border_width
+                    local g = {}
+                    g.x = wx
+                    g.y = wy
+                    g.height = height
+                    g.width = width
                     if g.width < 1 then g.width = 1 end
                     if g.height < 1 then g.height = 1 end
-                    c:geometry(g)
+                    p.geometries[cls[nclient]] = g
                     nclient = nclient + 1
-                    g.y = g.y + height + useless_gap
+                    wy = wy + height
                 end
-                local c = cls[nclient]
-                g.height = wa.height - (num_y[i] + 1)*useless_gap - (num_y[i] - 1)*height - 2*c.border_width
-                g.width = width - 2*c.border_width
+                local g = {}
+                g.x = wx
+                g.y = wy
+                g.height = wa.height - (num_y[i] - 1)*height
+                g.width = width
                 if g.width < 1 then g.width = 1 end
                 if g.height < 1 then g.height = 1 end
-                c:geometry(g)
+                p.geometries[cls[nclient]] = g
                 nclient = nclient + 1
-                g.x = g.x + width + useless_gap
+                wx = wx + width
             end
         end
     end