summaryrefslogtreecommitdiff
path: root/pager.lua
blob: 867b09b4acc57a7be9630dd2a22c74deeb660c12 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
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