93 lines
2.1 KiB
Lua
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
|