239 lines
7.5 KiB
Lua
239 lines
7.5 KiB
Lua
local awful = require "awful"
|
|
local btn = awful.button.names
|
|
local gc = require "gears.color"
|
|
local gs = require "gears.surface"
|
|
local qvars = require "quarrel.vars"
|
|
local qui = require "quarrel.ui"
|
|
local wibox = require "wibox"
|
|
local beautiful = require "beautiful"
|
|
local rubato = require "lib.rubato"
|
|
local playerctl = require "lib.bling.signal.playerctl".lib {
|
|
player = { "spotify", "cmus", "%any" }
|
|
}
|
|
|
|
local height = screen[1].geometry.height - (beautiful.useless_gap * 4 + qvars.border_width * 2)
|
|
local inside_width = qvars.bar_size * 20 - (qvars.big_padding * 4 + qvars.border_width * 4 + qvars.bar_size * 4)
|
|
|
|
local cover = wibox.widget {
|
|
{
|
|
widget = wibox.widget.imagebox,
|
|
clip_shape = qvars.shape,
|
|
forced_width = qvars.bar_size * 4,
|
|
forced_height = qvars.bar_size * 4,
|
|
visible = false,
|
|
id = "cover"
|
|
},
|
|
{
|
|
widget = wibox.container.background,
|
|
forced_width = qvars.bar_size * 4,
|
|
forced_height = qvars.bar_size * 4,
|
|
bg = qvars.colors.black,
|
|
fg = qvars.colors.dim.fg,
|
|
shape = qvars.shape,
|
|
{
|
|
widget = wibox.container.place,
|
|
{
|
|
widget = wibox.widget.textbox,
|
|
text = "",
|
|
font = qui.font(4)
|
|
}
|
|
},
|
|
id = "no_cover"
|
|
},
|
|
layout = wibox.layout.stack
|
|
}
|
|
|
|
local song = wibox.widget {
|
|
widget = wibox.widget.textbox,
|
|
text = "Nothing Playing ",
|
|
id = "song"
|
|
}
|
|
|
|
local artist = wibox.widget {
|
|
widget = wibox.widget.textbox,
|
|
markup = qui.markup_fg(qvars.colors.dim.fg, "Nothing Playing "),
|
|
font = qui.font(0.8),
|
|
}
|
|
|
|
local back = wibox.widget {
|
|
widget = wibox.widget.textbox,
|
|
text = "",
|
|
font = qui.symbol_font(1.5),
|
|
forced_height = beautiful.get_font_height(qui.symbol_font(0.5))
|
|
}
|
|
back:add_button(awful.button {
|
|
modifiers = {},
|
|
button = btn.LEFT,
|
|
on_press = function()
|
|
playerctl:previous()
|
|
end
|
|
})
|
|
|
|
local play_pause = wibox.widget {
|
|
widget = wibox.widget.textbox,
|
|
text = "",
|
|
font = qui.font(1.5),
|
|
forced_height = beautiful.get_font_height(qui.font(0.5))
|
|
}
|
|
play_pause:add_button(awful.button {
|
|
modifiers = {},
|
|
button = btn.LEFT,
|
|
on_press = function()
|
|
playerctl:play_pause()
|
|
end
|
|
})
|
|
playerctl:connect_signal("playback_status", function(_, playing)
|
|
if playing then
|
|
play_pause:set_text("")
|
|
else
|
|
play_pause:set_text("")
|
|
end
|
|
end)
|
|
|
|
local forward = wibox.widget {
|
|
widget = wibox.widget.textbox,
|
|
text = "",
|
|
font = qui.font(1.5),
|
|
forced_height = beautiful.get_font_height(qui.font(0.5))
|
|
}
|
|
forward:add_button(awful.button {
|
|
|
|
modifiers = {},
|
|
button = btn.LEFT,
|
|
on_press = function()
|
|
playerctl:next()
|
|
end
|
|
})
|
|
|
|
local progress_bar = wibox.widget {
|
|
widget = wibox.widget.progressbar,
|
|
max_value = 1,
|
|
value = 0,
|
|
shape = qvars.shape,
|
|
bar_shape = qvars.shape,
|
|
forced_height = beautiful.get_font_height(qui.font(0.5)),
|
|
forced_width = inside_width - (qvars.padding * 2 + qvars.big_padding + back:get_preferred_size_at_dpi(screen[1].dpi) * 3),
|
|
color = qvars.colors.yellow,
|
|
background_color = qvars.colors.black
|
|
}
|
|
local progress_smoothing = rubato.timed {
|
|
duration = qvars.anim_duration,
|
|
intro = qvars.anim_intro,
|
|
pos = 0,
|
|
subscribed = function(pos)
|
|
progress_bar.value = pos
|
|
end
|
|
}
|
|
playerctl:connect_signal("position", function(_, pos, len)
|
|
-- progress_bar.value = pos
|
|
progress_smoothing.target = pos
|
|
progress_bar.max_value = len
|
|
end)
|
|
|
|
local archaic = {}
|
|
|
|
archaic.playerctl = playerctl
|
|
|
|
archaic.widget = qui.popup {
|
|
placement = function(d)
|
|
return awful.placement.right(d, {
|
|
margins = beautiful.useless_gap * 2
|
|
})
|
|
end,
|
|
ontop = true,
|
|
minimum_width = qvars.bar_size * 20,
|
|
maximum_width = qvars.bar_size * 20,
|
|
minimum_height = height,
|
|
maximum_height = height,
|
|
widget = {
|
|
qui.styled {
|
|
widget = wibox.container.background,
|
|
{
|
|
widget = wibox.container.margin,
|
|
margins = qvars.big_padding,
|
|
{
|
|
cover,
|
|
{
|
|
{
|
|
{
|
|
{
|
|
widget = wibox.container.scroll.horizontal,
|
|
speed = 40,
|
|
fps = 60,
|
|
step_function = wibox.container.scroll.step_functions.waiting_nonlinear_back_and_forth,
|
|
song
|
|
},
|
|
{
|
|
widget = wibox.container.scroll.horizontal,
|
|
speed = 40,
|
|
fps = 60,
|
|
step_function = wibox.container.scroll.step_functions.waiting_nonlinear_back_and_forth,
|
|
artist
|
|
},
|
|
layout = wibox.layout.fixed.vertical
|
|
},
|
|
{
|
|
widget = wibox.container.background,
|
|
bg = gc {
|
|
type = "linear",
|
|
from = { 0, 0 },
|
|
to = { inside_width, 0 },
|
|
-- ^-------------------------------------------------------------------------------------- 270px
|
|
stops = {
|
|
{ 0, "#0000000" },
|
|
{ 0.95, "#0000000" },
|
|
{ 0.95, qvars.colors.bg .. "1a" },
|
|
{ 1, qvars.colors.bg }
|
|
}
|
|
}
|
|
},
|
|
layout = wibox.layout.stack
|
|
},
|
|
nil,
|
|
{
|
|
progress_bar,
|
|
{
|
|
back,
|
|
play_pause,
|
|
forward,
|
|
|
|
spacing = qvars.padding,
|
|
layout = wibox.layout.fixed.horizontal
|
|
},
|
|
spacing = qvars.big_padding,
|
|
layout = wibox.layout.fixed.horizontal
|
|
},
|
|
layout = wibox.layout.align.vertical
|
|
},
|
|
spacing = qvars.big_padding - qvars.border_width, -- for some reason awesome adds border_width here
|
|
layout = wibox.layout.fixed.horizontal
|
|
}
|
|
}
|
|
},
|
|
layout = wibox.layout.fixed.vertical
|
|
}
|
|
}
|
|
|
|
playerctl:connect_signal("metadata", function(_, _song, _artist, _cover)
|
|
-- n { message = "sus" }
|
|
song:set_text(_song .. " ")
|
|
-- ic.widget:emit_signal("widget::redraw_needed")
|
|
artist:set_markup(qui.markup_fg(qvars.colors.dim.fg, _artist .. " "))
|
|
if _cover == "" then
|
|
cover.cover.visible = false
|
|
cover.no_cover.visible = true
|
|
return
|
|
end
|
|
cover.cover.image = gs.load_uncached(_cover)
|
|
cover.cover.visible = true
|
|
cover.no_cover.visible = false
|
|
end)
|
|
|
|
function archaic:toggle()
|
|
self.widget.visible = not self.widget.visible
|
|
end
|
|
|
|
archaic:toggle()
|
|
|
|
return archaic
|