radical/widgets/checkbox.lua

121 lines
3.4 KiB
Lua

local setmetatable = setmetatable
local color = require("gears.color")
local cairo = require("lgi").cairo
local beautiful = require("beautiful")
local module = {}
local checkedI
local notcheckedI
local isinit = false
-- Default checkbox style
local function default()
local size = beautiful.menu_height or 16
local x_padding = 3
local sp = size * (beautiful.menu_checkbox_padding or 0.08)
local rs = size - (2 * sp)
notcheckedI = cairo.ImageSurface(cairo.Format.ARGB32, size, size)
checkedI = cairo.ImageSurface(cairo.Format.ARGB32, size, size)
-- Checked
local cr = cairo.Context(checkedI)
cr:set_operator(cairo.Operator.CLEAR)
cr:paint()
cr:set_operator(cairo.Operator.SOURCE)
cr:set_line_width(1)
cr:set_source(color(beautiful.menu_checkbox_color or beautiful.fg_normal))
cr:move_to(sp, sp);cr:line_to(rs, sp)
cr:move_to(sp, sp);cr:line_to(sp, rs)
cr:move_to(sp, rs);cr:line_to(rs, rs)
cr:move_to(rs, sp);cr:line_to(rs, rs)
cr:stroke()
cr:set_line_width(2)
cr:set_source(color(beautiful.menu_checkbox_checked_color or beautiful.fg_normal))
cr:move_to(sp + x_padding, sp + x_padding);cr:line_to(rs - x_padding, rs - x_padding)
cr:move_to(sp + x_padding, rs - x_padding);cr:line_to(rs - x_padding, sp + x_padding)
cr:stroke()
-- Unchecked
local cr2 = cairo.Context(notcheckedI)
cr2:set_operator(cairo.Operator.CLEAR)
cr2:paint()
cr2:set_operator(cairo.Operator.SOURCE)
cr2:set_line_width(1)
cr2:set_source(color(beautiful.menu_checkbox_color or beautiful.fg_normal))
cr2:move_to(sp, sp);cr2:line_to(rs, sp)
cr2:move_to(sp, sp);cr2:line_to(sp, rs)
cr2:move_to(sp, rs);cr2:line_to(rs, rs)
cr2:move_to(rs, sp);cr2:line_to(rs, rs)
cr2:stroke()
isinit = true
end
-- Holo checkbox style
local function holo()
local size = (beautiful.menu_height or 16)
local x_padding = 3
local padding = size * (beautiful.menu_checkbox_padding or 0.08)
notcheckedI = cairo.ImageSurface(cairo.Format.ARGB32, size, size)
checkedI = cairo.ImageSurface(cairo.Format.ARGB32, size, size)
size = (size-(2*padding))/2
-- Unchecked
local cr2 = cairo.Context(notcheckedI)
cr2:set_operator(cairo.Operator.CLEAR)
cr2:paint()
cr2:set_operator(cairo.Operator.SOURCE)
cr2:set_source(color(beautiful.menu_checkbox_color or beautiful.fg_normal))
cr2:set_line_width(1)
cr2:arc(size+1, size+1, size, 0, math.pi*2)
cr2:stroke()
-- Checked
local cr = cairo.Context(checkedI)
cr:set_operator(cairo.Operator.CLEAR)
cr:paint()
cr:set_operator(cairo.Operator.SOURCE)
cr:set_line_width(1)
cr:set_source(color(beautiful.menu_checkbox_color or beautiful.fg_normal))
cr:arc(size+1, size+1, size, 0, math.pi*2)
cr:stroke()
cr:set_source(color(beautiful.menu_checkbox_checked_color or beautiful.fg_normal))
cr:arc(size+1, size+1, size-x_padding, 0, math.pi*2)
cr:fill()
isinit = true
end
local style = {
holo = holo,
default = default,
}
function module.checked()
if not isinit then
style[beautiful.menu_checkbox_style or "default"]()
end
return checkedI
end
function module.unchecked()
if not isinit then
style[beautiful.menu_checkbox_style or "default"]()
end
return notcheckedI
end
return setmetatable(module, { __call = function(_, ...) return new(...) end })