diff options
Diffstat (limited to '.config/awesome/ui/osd.lua')
-rw-r--r-- | .config/awesome/ui/osd.lua | 102 |
1 files changed, 102 insertions, 0 deletions
diff --git a/.config/awesome/ui/osd.lua b/.config/awesome/ui/osd.lua new file mode 100644 index 0000000..fc74ed9 --- /dev/null +++ b/.config/awesome/ui/osd.lua @@ -0,0 +1,102 @@ +--- Heavy inspiration from a design made by https://github.com/tsukki9696 + +local awful = require "awful" +local beautiful = require "beautiful" +local gtimer = require "gears.timer" +local phosphor = require "assets.phosphor" +local qmath = require "quarrel.math" +local qui = require "quarrel.ui" +local qvars = require "quarrel.vars" +local rubato = require "lib.rubato" +local wibox = require "wibox" + +local osd = {} + +local widget = qui.popup { + ontop = true, + visible = false, + placement = function(d) + awful.placement.top(d, { + margins = { + top = beautiful.useless_gap * 2, + }, + }) + end, + minimum_height = qvars.char_height * 2, + -- minimum_width = awful.screen.focused().geometry.width / 2, + widget = { + { + widget = wibox.container.place, + + qui.icon { + icon = phosphor.speaker_simple_none_fill, + widget = { + forced_height = qvars.char_height * 1.2, + forced_width = qvars.char_height * 1.2, + id = "icon", + }, + }, + }, + { + widget = wibox.container.place, + { + widget = wibox.widget.progressbar, + max_value = 100, + value = 20, + forced_height = qvars.char_height / 1.5, + forced_width = qvars.expanded_bar_size + - (qvars.big_padding + qvars.big_padding * 2 + qvars.padding * 2) + - (qvars.char_height / 1.25 + qvars.padding) * 3, + color = qvars.colors.yellow, + background_color = qvars.colors.black, + shape = qvars.shape, + id = "progress", + }, + }, + + { + widget = wibox.widget.textbox, + text = "20%", + font = qui.font(1.2), + id = "percentage", + }, + layout = wibox.layout.fixed.horizontal, + spacing = qvars.big_padding, + }, +} + +local timer + +local anim = rubato.timed { + duration = qvars.anim_duration, + intro = qvars.anim_intro, + pos = 0, + subscribed = function(pos) + widget.opacity = pos + if pos == 0 then + widget.visible = false + elseif not widget.visible then + widget.visible = true + elseif pos == 1 then + timer:start() + end + end, +} + +timer = gtimer { + timeout = 1, + callback = function() + anim.target = 0 + end, + single_shot = true, +} + +function osd.notify(icon, value, max) + anim.target = 1 + widget:get_children_by_id("icon")[1].image = icon + widget:get_children_by_id("progress")[1].value = value + widget:get_children_by_id("progress")[1].max_value = max + widget:get_children_by_id("percentage")[1].text = tostring(qmath.percentage(value, max)) .. "%" +end + +return osd |