From 0fb39f8d01d60e1afa9be77e372791e43af74df6 Mon Sep 17 00:00:00 2001 From: minde Date: Sun, 3 Jan 2016 20:33:34 +0200 Subject: [PATCH] Allow users to change checkbox style. Added: theme.menu_checkbox_padding theme.menu_checkbox_color theme.menu_checkbox_checked_color --- widgets/checkbox.lua | 126 +++++++++++++++++++++++++------------------ 1 file changed, 75 insertions(+), 51 deletions(-) diff --git a/widgets/checkbox.lua b/widgets/checkbox.lua index 3216117..143604c 100644 --- a/widgets/checkbox.lua +++ b/widgets/checkbox.lua @@ -1,88 +1,111 @@ local setmetatable = setmetatable -local print = print -local color = require("gears.color") -local cairo = require( "lgi" ).cairo - -local beautiful = require( "beautiful" ) +local color = require("gears.color") +local cairo = require("lgi").cairo +local beautiful = require("beautiful") local module = {} local checkedI local notcheckedI -local isinit = false +local isinit = false -local function init() - local size = beautiful.menu_height or 16 - notcheckedI = cairo.ImageSurface(cairo.Format.ARGB32, size,size) - checkedI = cairo.ImageSurface(cairo.Format.ARGB32, size,size) - local cr2 = cairo.Context(notcheckedI) - local cr = cairo.Context(checkedI) +-- 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) - cr2:set_operator(cairo.Operator.CLEAR) cr:paint() - cr2:paint() cr:set_operator(cairo.Operator.SOURCE) - cr2:set_operator(cairo.Operator.SOURCE) - local sp = size*0.15 - local rs = size - (2*sp) - cr:set_source(color(beautiful.fg_normal)) - cr2:set_source(color(beautiful.fg_normal)) - cr:set_line_width(2) - cr2:set_line_width(2) - 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:move_to( sp , sp );cr:line_to( rs , rs ) - cr:move_to( sp , rs );cr:line_to( rs , sp ) + + 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() - cr2:move_to( sp , sp );cr2:line_to (rs , sp , beautiful.fg_normal ) - cr2:move_to( sp , sp );cr2:line_to (sp , rs , beautiful.fg_normal ) - cr2:move_to( sp , rs );cr2:line_to (rs , rs , beautiful.fg_normal ) - cr2:move_to( rs , sp );cr2:line_to (rs , rs , beautiful.fg_normal ) + 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 - notcheckedI = cairo.ImageSurface(cairo.Format.ARGB32, size,size) - checkedI = cairo.ImageSurface(cairo.Format.ARGB32, size,size) - local cr2 = cairo.Context(notcheckedI) - local cr = cairo.Context(checkedI) - cr:set_operator(cairo.Operator.CLEAR) + 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) - cr:paint() cr2:paint() - cr:set_operator(cairo.Operator.SOURCE) cr2:set_operator(cairo.Operator.SOURCE) - local col = color(beautiful.menu_outline_color or beautiful.menu_border_color or beautiful.border_color) - cr:set_source(col) - cr2:set_source(col) - cr:set_line_width(1) + + cr2:set_source(color(beautiful.menu_checkbox_color or beautiful.fg_normal)) cr2:set_line_width(1) - size = size -2 - cr:arc(size/2+1,size/2+1,size/2,0,math.pi*2) - cr:stroke() - cr2:arc(size/2+1,size/2+1,size/2,0,math.pi*2) + cr2:arc(size+1, size+1, size, 0, math.pi*2) cr2:stroke() - size = size - 8 - cr:set_source(color(beautiful.fg_normal)) - cr:arc(size/2+5,size/2+5,size/2,0,math.pi*2) + + -- 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 = init, + default = default, } function module.checked() if not isinit then style[beautiful.menu_checkbox_style or "default"]() end + return checkedI end @@ -90,6 +113,7 @@ function module.unchecked() if not isinit then style[beautiful.menu_checkbox_style or "default"]() end + return notcheckedI end