aboutsummaryrefslogtreecommitdiff
path: root/.config/awesome/quarrel/ui.lua
diff options
context:
space:
mode:
authordelta <darkussdelta@gmail.com>2024-03-05 14:48:59 +0100
committerdelta <darkussdelta@gmail.com>2024-03-05 14:48:59 +0100
commit510ef8e178929cf5e0c7fd5a5120fecf5f1b79f2 (patch)
tree3582e5cd7d000335ca94f2a009f3aed57bd86919 /.config/awesome/quarrel/ui.lua
parent95ba8030f722a616cff06c122dcfb2f63e25cf45 (diff)
idk anymore
Diffstat (limited to '.config/awesome/quarrel/ui.lua')
-rw-r--r--.config/awesome/quarrel/ui.lua94
1 files changed, 58 insertions, 36 deletions
diff --git a/.config/awesome/quarrel/ui.lua b/.config/awesome/quarrel/ui.lua
index 274d48a..1db4a70 100644
--- a/.config/awesome/quarrel/ui.lua
+++ b/.config/awesome/quarrel/ui.lua
@@ -2,69 +2,68 @@ local awful = require "awful"
local gtable = require "gears.table"
local qbind = require "quarrel.bind"
local qvars = require "quarrel.vars"
+local rtimed = require "lib.rubato.timed"
local wibox = require "wibox"
+---@class QuarrelUi
local qui = {}
-function qui.markup_fg(color, text)
- return "<span color=\"" .. color .. "\">" .. text .. "</span>"
-end
-
-function qui.markup_bg(color, text)
- return "<span bgcolor=\"" .. color .. "\">" .. text .. "</span>"
-end
-
+--- Return qvars.text_font with size scaled by factor
+---@param factor number
+---@return string
+---@see QuarrelVars.text_font
function qui.font(factor)
return qvars.text_font .. " " .. qvars.font_size * (factor or 1)
end
+--- Inject background widget styling into target
+---@param target table
+---@return table
function qui.styled(target)
return gtable.crush({
bg = qvars.colors.bg,
border_color = qvars.colors.bright.black,
border_width = qvars.border_width,
- shape = qvars.shape
+ shape = qvars.shape,
}, target)
end
+--- Generate a styled popup
+---@param target table
+---@return table
function qui.popup(target)
target.widget = {
widget = wibox.container.margin,
margins = qvars.big_padding,
- target.widget
+ target.widget,
}
return awful.popup(qui.styled(target))
end
-function qui.tooltip(objects, callback)
- awful.tooltip(qui.styled {
- objects = objects,
- timer_function = callback,
- margin_leftright = qvars.padding,
- margin_topbottom = qvars.padding
- })
-end
-
+--- Generate svg recolor string
+---@param color string
+---@return string
function qui.recolor(color)
return "svg{fill:" .. color .. "}"
end
-function qui.icon(image, color, target)
- local widget = {
+--- Generate icon widget
+---@param args table
+---@return table
+function qui.icon(args)
+ return gtable.crush({
widget = wibox.widget.imagebox,
- image = image,
+ image = args.icon,
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
+ stylesheet = qui.recolor(args.color or qvars.colors.fg),
+ }, args.widget or {})
end
+--- Generate button widget
+---@param args table
+---@return table
function qui.button(args)
args.press = args.press or function(_) end
local widget = wibox.widget(gtable.crush({
@@ -73,7 +72,7 @@ function qui.button(args)
forced_height = qvars.char_height,
forced_width = qvars.char_height,
stylesheet = qui.recolor(qvars.colors.fg),
- press = args.press
+ press = args.press,
}, args.widget or {}))
widget.buttons = {
@@ -82,16 +81,19 @@ function qui.button(args)
press = function()
widget:press()
end,
- hidden = true
- }
+ hidden = true,
+ },
}
return widget
end
+--- Generate toggle widget
+---@param args table
+---@return table
function qui.toggle(args)
args.press = args.press or function(_) end
- local widget = qui.button({
+ local widget = qui.button {
widget = gtable.crush({
toggled = false,
silent_press = function(self, state)
@@ -100,7 +102,7 @@ function qui.toggle(args)
else
self.toggled = not self.toggled
end
-
+
if self.toggled then
self.image = args.on
else
@@ -114,10 +116,30 @@ function qui.toggle(args)
self:silent_press()
end
args.press(self)
- end
- })
+ end,
+ }
return widget
end
+---@param widget wibox.widget.base
+---@param cursor string
+function qui.hoverable(widget, cursor)
+ local hovering = false
+
+ widget:connect_signal("mouse::enter", function()
+ local w = mouse.current_wibox
+ if w then
+ w.cursor = cursor
+ end
+ end)
+
+ widget:connect_signal("mouse::leave", function()
+ local w = mouse.current_wibox
+ if w then
+ w.cursor = "left_ptr"
+ end
+ end)
+end
+
return qui