desktop, calendar, various other modules
This commit is contained in:
119
awesome/src/modules/desktop/element.lua
Normal file
119
awesome/src/modules/desktop/element.lua
Normal file
@@ -0,0 +1,119 @@
|
||||
local base = require("wibox.widget.base")
|
||||
local wibox = require("wibox")
|
||||
local gtable = require("gears.table")
|
||||
local dpi = require("beautiful").xresources.apply_dpi
|
||||
local gshape = require("gears.shape")
|
||||
local gfilesystem = require("gears.filesystem")
|
||||
local gcolor = require("gears.color")
|
||||
local abutton = require("awful.button")
|
||||
|
||||
local icondir = gfilesystem.get_configuration_dir() .. "src/assets/icons/desktop/"
|
||||
|
||||
local capi = {
|
||||
mouse = mouse
|
||||
}
|
||||
|
||||
local element = { mt = {} }
|
||||
|
||||
function element:layout(_, width, height)
|
||||
if self._private.widget then
|
||||
return { base.place_widget_at(self._private.widget, 0, 0, width, height) }
|
||||
end
|
||||
end
|
||||
|
||||
function element:fit(context, width, height)
|
||||
local w, h = 0, 0
|
||||
if self._private.widget then
|
||||
w, h = base.fit_widget(self, context, self._private.widget, width, height)
|
||||
end
|
||||
return w, h
|
||||
end
|
||||
|
||||
function element:get_widget()
|
||||
return self._private.widget
|
||||
end
|
||||
|
||||
function element:on_hover()
|
||||
self:connect_signal("mouse::enter", function()
|
||||
self.bg = "#0ffff033"
|
||||
self.border_color = "#0ffff099"
|
||||
end)
|
||||
|
||||
self:connect_signal("mouse::leave", function()
|
||||
self.bg = gcolor.transparent
|
||||
self.border_color = gcolor.transparent
|
||||
end)
|
||||
|
||||
self:connect_signal("button::press", function()
|
||||
self.bg = "#0ffff088"
|
||||
self.border_color = "#0ffff0dd"
|
||||
end)
|
||||
|
||||
self:connect_signal("button::release", function()
|
||||
self.bg = "#0ffff033"
|
||||
self.border_color = "#0ffff099"
|
||||
end)
|
||||
end
|
||||
|
||||
function element.new(args)
|
||||
args = args or {}
|
||||
|
||||
local w = base.make_widget_from_value(wibox.widget {
|
||||
{
|
||||
{
|
||||
{
|
||||
{
|
||||
image = args.icon,
|
||||
resize = true,
|
||||
clip_shape = gshape.rounded_rect,
|
||||
valign = "center",
|
||||
halign = "center",
|
||||
id = "icon_role",
|
||||
widget = wibox.widget.imagebox
|
||||
},
|
||||
strategy = "exact",
|
||||
height = args.icon_size,
|
||||
width = args.icon_size,
|
||||
widget = wibox.container.constraint
|
||||
},
|
||||
{
|
||||
text = args.label,
|
||||
id = "text_role",
|
||||
valign = "center",
|
||||
halign = "center",
|
||||
widget = wibox.widget.textbox
|
||||
},
|
||||
spacing = dpi(10),
|
||||
layout = wibox.layout.fixed.vertical
|
||||
},
|
||||
widget = wibox.container.place,
|
||||
valign = "center",
|
||||
halign = "center"
|
||||
},
|
||||
fg = "#ffffff",
|
||||
bg = gcolor.transparent,
|
||||
border_color = gcolor.transparent,
|
||||
border_width = dpi(2),
|
||||
shape = gshape.rounded_rect,
|
||||
forced_width = args.width,
|
||||
forced_height = args.height,
|
||||
width = args.width,
|
||||
height = args.height,
|
||||
exec = args.exec,
|
||||
icon_size = args.icon_size,
|
||||
icon = args.icon,
|
||||
widget = wibox.container.background
|
||||
})
|
||||
|
||||
gtable.crush(w, element, true)
|
||||
|
||||
w:on_hover()
|
||||
|
||||
return w
|
||||
end
|
||||
|
||||
function element.mt:__call(...)
|
||||
return element.new(...)
|
||||
end
|
||||
|
||||
return setmetatable(element, element.mt)
|
||||
Reference in New Issue
Block a user