awesome/widget/material/icon.lua

81 lines
1.5 KiB
Lua

-- Default widget requirements
local base = require('wibox.widget.base')
local gtable = require('gears.table')
local setmetatable = setmetatable
-- Commons requirements
local wibox = require('wibox')
-- Local declarations
local mat_list_item = {mt = {}}
function mat_list_item:layout(_, width, height)
local layout = {}
-- Add divider if present
if self._private.icon then
table.insert(
layout,
base.place_widget_at(
self._private.imagebox,
width / 2 - self._private.size / 2,
height / 2 - self._private.size / 2,
self._private.size,
self._private.size
)
)
end
return layout
end
function mat_list_item:fit(_, width, height)
local min = math.min(width, height)
return min, min
end
function mat_list_item:set_icon(icon)
self._private.icon = icon
self._private.imagebox.image = icon
end
function mat_list_item:get_icon()
return self._private.icon
end
function mat_list_item:set_size(size)
self._private.size = size
self:emit_signal('widget::layout_changed')
end
function mat_list_item:get_size()
return self._private.size
end
local function new(icon, size)
local ret =
base.make_widget(
nil,
nil,
{
enable_properties = true
}
)
gtable.crush(ret, mat_list_item, true)
ret._private.icon = icon
ret._private.imagebox = wibox.widget.imagebox(icon)
ret._private.size = size
return ret
end
function mat_list_item.mt:__call(...)
return new(...)
end
--@DOC_widget_COMMON@
--@DOC_object_COMMON@
return setmetatable(mat_list_item, mat_list_item.mt)