1
0
awesomewm-config/utils.lua
2023-06-04 15:59:49 +03:00

93 lines
2.1 KiB
Lua

-- Helpful reference when working with cairo:
-- * https://github.com/pavouk/lgi/blob/master/samples/cairo.lua
-- * https://www.cairographics.org/manual/cairo-cairo-t.html
-- * https://www.cairographics.org/operators/
-- * https://www.cairographics.org/manual/cairo-cairo-t.html#cairo-operator-t
local utils = {}
local lgi = require("lgi")
local cairo = lgi.cairo
function utils.bindings(keybindings_tree)
local keybindings = {}
local trees = {keybindings_tree}
while #trees > 0 do
local tree = table.remove(trees)
for _, subtree in ipairs(tree) do
if type(subtree) == "table" and not subtree.binding then
table.insert(trees, subtree)
else
subtree.binding = nil
table.insert(keybindings, subtree)
end
end
end
return keybindings
end
function utils.group(group_name, keybindings)
for _, key in ipairs(keybindings) do
key.group = group_name
end
return keybindings
end
function utils.keybind(modifiers, key, on_press)
local keybind_keys = awful.key{
modifiers = modifiers,
key = key,
on_press = on_press,
}
keybind_keys.binding = true
return keybind_keys
end
function utils.keybind_grp(modifiers, keygroup, on_press)
local keys_grp = awful.key{
modifiers = modifiers,
keygroup = keygroup,
on_press = on_press,
}
keys_grp.binding = true
return keys_grp
end
function utils.buttonbind(modifiers, key, on_press)
local btns = awful.button(modifiers, key, on_press)
btns.binding = true
return btns
end
function utils.wrap_spawn(process)
return function()
awful.spawn(process)
end
end
function utils.wrap_spawn_with_shell(process)
return function()
awful.spawn(process)
end
end
function utils.clone_image(img)
local cloned = cairo.ImageSurface.create(cairo.Format.ARGB32, img.width, img.height)
local cr = cairo.Context(cloned)
cr:set_source_surface(img, 0, 0)
cr:paint()
return cloned
end
function utils.overwrite_colored_image(img, on_top_image, color)
local cr = cairo.Context(img)
cr:set_operator(2) -- CAIRO_OPERATOR_OVER = 2
cr:set_source_surface(on_top_image, 0, 0)
cr:paint()
cr:set_source(gears.color(color))
cr:set_operator(5) -- CAIRO_OPERATOR_ATOP = 5
cr:paint()
end
return utils