diff options
Diffstat (limited to '.config/awesome/quarrel/ui.lua')
-rw-r--r-- | .config/awesome/quarrel/ui.lua | 91 |
1 files changed, 81 insertions, 10 deletions
diff --git a/.config/awesome/quarrel/ui.lua b/.config/awesome/quarrel/ui.lua index 8e979cb..274d48a 100644 --- a/.config/awesome/quarrel/ui.lua +++ b/.config/awesome/quarrel/ui.lua @@ -1,5 +1,6 @@ local awful = require "awful" -local gears = require "gears" +local gtable = require "gears.table" +local qbind = require "quarrel.bind" local qvars = require "quarrel.vars" local wibox = require "wibox" @@ -17,12 +18,8 @@ function qui.font(factor) return qvars.text_font .. " " .. qvars.font_size * (factor or 1) end -function qui.symbol_font(factor) - return qvars.symbol_font .. " " .. qvars.font_size * (factor or 1) -end - function qui.styled(target) - return gears.table.crush({ + return gtable.crush({ bg = qvars.colors.bg, border_color = qvars.colors.bright.black, border_width = qvars.border_width, @@ -30,14 +27,14 @@ function qui.styled(target) }, target) end -function qui.popup(args) - args.widget = { +function qui.popup(target) + target.widget = { widget = wibox.container.margin, margins = qvars.big_padding, - args.widget + target.widget } - return awful.popup(qui.styled(args)) + return awful.popup(qui.styled(target)) end function qui.tooltip(objects, callback) @@ -49,4 +46,78 @@ function qui.tooltip(objects, callback) }) end +function qui.recolor(color) + return "svg{fill:" .. color .. "}" +end + +function qui.icon(image, color, target) + local widget = { + widget = wibox.widget.imagebox, + image = image, + forced_width = qvars.char_height, + forced_height = qvars.char_height, + stylesheet = qui.recolor(color or qvars.colors.fg) + } + if target then + return gtable.crush(widget, target) + else + return widget + end +end + +function qui.button(args) + args.press = args.press or function(_) end + local widget = wibox.widget(gtable.crush({ + widget = wibox.widget.imagebox, + image = args.image, + forced_height = qvars.char_height, + forced_width = qvars.char_height, + stylesheet = qui.recolor(qvars.colors.fg), + press = args.press + }, args.widget or {})) + + widget.buttons = { + qbind:new { + triggers = qvars.btns.left, + press = function() + widget:press() + end, + hidden = true + } + } + + return widget +end + +function qui.toggle(args) + args.press = args.press or function(_) end + local widget = qui.button({ + widget = gtable.crush({ + toggled = false, + silent_press = function(self, state) + if state then + self.toggled = state + else + self.toggled = not self.toggled + end + + if self.toggled then + self.image = args.on + else + self.image = args.off + end + end, + }, args.widget or {}), + image = args.off, + press = function(self) + if not args.manual then + self:silent_press() + end + args.press(self) + end + }) + + return widget +end + return qui |