awesome/lib/wibox/widget/systray.lua.in

69 lines
1.9 KiB
Lua

---------------------------------------------------------------------------
-- @author Uli Schlachter
-- @copyright 2010 Uli Schlachter
-- @release @AWESOME_VERSION@
---------------------------------------------------------------------------
local wbase = require("wibox.widget.base")
local lbase = require("wibox.layout.base")
local capi = { awesome = awesome }
local setmetatable = setmetatable
local error = error
module("wibox.widget.systray")
local created_systray = false
local horizontal = true
local base_size = 16
function draw(box, wibox, cr, width, height)
local x, y, width, height = lbase.rect_to_device_geometry(cr, 0, 0, width, height)
local num_entries = capi.awesome.systray()
local width, height = width, height
local in_dir, ortho, base_size
if horizontal then
in_dir, ortho = width, height
else
ortho, in_dir = width, height
end
if ortho * num_entries <= in_dir then
base = ortho
else
base = in_dir / num_entries
end
capi.awesome.systray(wibox.drawin, x, y, base, horizontal)
end
function fit(box, width, height)
local num_entries = capi.awesome.systray()
if horizontal then
return base_size * num_entries, base_size
end
return base_size, base_size * num_entries
end
local function new(horiz)
local ret = wbase.make_widget()
horizontal = horiz
if created_systray then
error("More than one systray created!")
end
created_systray = true
ret.fit = fit
ret.draw = draw
ret.set_base_size = function(_, size) base_size = size end
capi.awesome.connect_signal("systray::update", function()
ret:emit_signal("widget::updated")
end)
return ret
end
setmetatable(_M, { __call = function (_, ...) return new(...) end })
-- vim: filetype=lua:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:encoding=utf-8:textwidth=80