aboutsummaryrefslogtreecommitdiff
path: root/.config/awesome/ui/osd.lua
diff options
context:
space:
mode:
Diffstat (limited to '.config/awesome/ui/osd.lua')
-rw-r--r--.config/awesome/ui/osd.lua102
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