summaryrefslogtreecommitdiff
path: root/pager.lua
diff options
context:
space:
mode:
authorAnton Khirnov <anton@khirnov.net>2016-12-25 12:03:06 +0100
committerAnton Khirnov <anton@khirnov.net>2016-12-25 12:03:06 +0100
commite8bb1f4a1844f07fc2f6973f2e7b400f2ddf2f3d (patch)
tree73e0028d455fef267c5c8a46c32a45430af9683c /pager.lua
Initial commit.
Diffstat (limited to 'pager.lua')
-rw-r--r--pager.lua52
1 files changed, 52 insertions, 0 deletions
diff --git a/pager.lua b/pager.lua
new file mode 100644
index 0000000..867b09b
--- /dev/null
+++ b/pager.lua
@@ -0,0 +1,52 @@
+local M = {}
+
+local wibox = require("wibox")
+
+local Pager = {}
+
+local function pager_fit(pager, width, height)
+ return width, width * #pager.desktop.pages
+end
+
+local function pager_draw(pager, wibox, cr, width, height)
+ if pager.desktop == nil then
+ return
+ end
+
+ local nb_pages = #pager.desktop.pages
+ local page_height = height / nb_pages
+
+ for i = 1, nb_pages do
+ local page = pager.desktop.pages[i]
+ local draw_h_start = (i - 1) * page_height
+
+ for j, client in pairs(page:clients()) do
+ local text = client.name
+ local extents = cr:text_extents(text)
+ cr:move_to(0, draw_h_start)
+ cr:show_text(text)
+ draw_h_start = draw_h_start + extents.height
+ end
+ end
+ cr:set_line_width(3)
+ cr:stroke()
+end
+
+local function pager_set_desktop(pager, desktop)
+ pager.desktop = desktop
+ pager:emit_signal("widget::updated")
+end
+
+function Pager:new()
+ local pager = wibox.widget.base.make_widget()
+
+ pager.fit = pager_fit
+ pager.draw = pager_draw
+ pager.set_desktop = pager_set_desktop
+
+ return pager
+end
+
+M.Pager = Pager
+
+return M