256 lines
6.1 KiB
Lua
256 lines
6.1 KiB
Lua
local awful = require("awful")
|
|
local gears = require("gears")
|
|
local beautiful = require("beautiful")
|
|
local wibox = require("wibox")
|
|
local helpers = require("helpers")
|
|
local playerctl_daemon = require("signals.playerctl")
|
|
local config = require("config")
|
|
|
|
local theme = beautiful.get()
|
|
local dpi = beautiful.xresources.apply_dpi
|
|
|
|
---- Music Player
|
|
---- ~~~~~~~~~~~~
|
|
|
|
local music_text = wibox.widget({
|
|
font = helpers.ui.set_font("Medium 10"),
|
|
valign = "center",
|
|
widget = wibox.widget.textbox,
|
|
})
|
|
|
|
local music_art = wibox.widget({
|
|
image = theme.music,
|
|
resize = true,
|
|
widget = wibox.widget.imagebox,
|
|
})
|
|
|
|
local music_art_container = wibox.widget({
|
|
music_art,
|
|
forced_height = dpi(200),
|
|
forced_width = dpi(200),
|
|
widget = wibox.container.background,
|
|
})
|
|
|
|
local filter_color = {
|
|
type = "linear",
|
|
from = { 0, 0 },
|
|
to = { 0, 160 },
|
|
stops = { { 0, theme.color.surface0 .. "cc" }, { 1, theme.color.surface0 } },
|
|
}
|
|
|
|
local music_art_filter = wibox.widget({
|
|
{
|
|
bg = filter_color,
|
|
forced_height = dpi(120),
|
|
forced_width = dpi(120),
|
|
widget = wibox.container.background,
|
|
},
|
|
direction = "east",
|
|
widget = wibox.container.rotate,
|
|
})
|
|
|
|
local music_title = wibox.widget({
|
|
font = helpers.ui.set_font("Regular 13"),
|
|
valign = "center",
|
|
widget = wibox.widget.textbox,
|
|
})
|
|
|
|
local music_artist = wibox.widget({
|
|
font = helpers.ui.set_font("Bold 16"),
|
|
valign = "center",
|
|
widget = wibox.widget.textbox,
|
|
})
|
|
|
|
--- Volume Control
|
|
local function volume_control()
|
|
local volume_bar = wibox.widget({
|
|
max_value = 100,
|
|
value = 100,
|
|
bar_height = dpi(12),
|
|
bar_width = dpi(4),
|
|
shape = helpers.ui.rrect(6),
|
|
bar_shape = helpers.ui.rrect(6),
|
|
color = theme.color.blue,
|
|
background_color = theme.color.surface0,
|
|
border_width = 0,
|
|
widget = wibox.widget.progressbar,
|
|
})
|
|
|
|
-- Update bar
|
|
local function set_slider_value(_, volume)
|
|
volume_bar.value = volume * 100
|
|
end
|
|
|
|
playerctl_daemon:connect_signal("volume", set_slider_value)
|
|
|
|
volume_bar:connect_signal("button::press", function()
|
|
playerctl_daemon:disconnect_signal("volume", set_slider_value)
|
|
end)
|
|
|
|
volume_bar:connect_signal("button::release", function()
|
|
playerctl_daemon:connect_signal("volume", set_slider_value)
|
|
end)
|
|
|
|
local volume = wibox.widget({
|
|
volume_bar,
|
|
direction = "east",
|
|
widget = wibox.container.rotate,
|
|
})
|
|
|
|
volume:buttons(gears.table.join(
|
|
-- Scroll - Increase or decrease volume
|
|
awful.button({}, 4, function()
|
|
awful.spawn.with_shell("playerctl volume 0.05+")
|
|
end),
|
|
|
|
awful.button({}, 5, function()
|
|
awful.spawn.with_shell("playerctl volume 0.05-")
|
|
end)
|
|
))
|
|
|
|
return volume
|
|
end
|
|
|
|
-- Player's Button
|
|
local toggle = wibox.widget.textbox()
|
|
toggle.font = helpers.ui.set_font("26")
|
|
|
|
toggle:buttons(gears.table.join(awful.button({}, 1, function()
|
|
playerctl_daemon:play_pause()
|
|
end)))
|
|
|
|
local next = wibox.widget.textbox()
|
|
next.font = helpers.ui.set_font("26")
|
|
next.markup = config.icons.music.next
|
|
|
|
next:buttons(gears.table.join(awful.button({}, 1, function()
|
|
playerctl_daemon:next()
|
|
end)))
|
|
|
|
local back = wibox.widget.textbox()
|
|
back.font = helpers.ui.set_font("26")
|
|
back.markup = config.icons.music.prev
|
|
|
|
back:buttons(gears.table.join(awful.button({}, 1, function()
|
|
playerctl_daemon:previous()
|
|
end)))
|
|
|
|
local function music()
|
|
return wibox.widget({
|
|
{
|
|
{
|
|
music_art_container,
|
|
music_art_filter,
|
|
layout = wibox.layout.stack,
|
|
},
|
|
{
|
|
{
|
|
{
|
|
music_text,
|
|
helpers.ui.vertical_pad(dpi(15)),
|
|
{
|
|
|
|
{
|
|
widget = wibox.container.scroll.horizontal,
|
|
step_function = wibox.container.scroll.step_functions.waiting_nonlinear_back_and_forth,
|
|
fps = 60,
|
|
speed = 75,
|
|
music_artist,
|
|
},
|
|
{
|
|
widget = wibox.container.scroll.horizontal,
|
|
step_function = wibox.container.scroll.step_functions.waiting_nonlinear_back_and_forth,
|
|
fps = 60,
|
|
speed = 75,
|
|
music_title,
|
|
},
|
|
forced_width = dpi(170),
|
|
layout = wibox.layout.fixed.vertical,
|
|
},
|
|
layout = wibox.layout.fixed.vertical,
|
|
},
|
|
nil,
|
|
{
|
|
{
|
|
back,
|
|
toggle,
|
|
next,
|
|
spacing = dpi(25),
|
|
layout = wibox.layout.fixed.horizontal,
|
|
},
|
|
forced_height = dpi(70),
|
|
top = dpi(10),
|
|
bottom = dpi(10),
|
|
right = dpi(10),
|
|
left = dpi(115),
|
|
widget = wibox.container.margin,
|
|
},
|
|
expand = "none",
|
|
layout = wibox.layout.align.vertical,
|
|
},
|
|
top = dpi(9),
|
|
bottom = dpi(9),
|
|
left = dpi(10),
|
|
right = dpi(10),
|
|
widget = wibox.container.margin,
|
|
},
|
|
layout = wibox.layout.stack,
|
|
},
|
|
forced_width = dpi(350),
|
|
shape = helpers.ui.prrect(8, false, true, true, false),
|
|
bg = theme.color.surface0,
|
|
widget = wibox.container.background,
|
|
})
|
|
end
|
|
|
|
local music_widget = wibox.widget({
|
|
{
|
|
{
|
|
music(),
|
|
{
|
|
volume_control(),
|
|
margins = { top = dpi(0), bottom = dpi(0), left = dpi(10), right = dpi(10) },
|
|
widget = wibox.container.margin,
|
|
},
|
|
layout = wibox.layout.align.horizontal,
|
|
},
|
|
forced_height = dpi(150),
|
|
bg = theme.color.base,
|
|
shape = helpers.ui.rrect(8),
|
|
widget = wibox.container.background,
|
|
},
|
|
left = dpi(20),
|
|
right = dpi(10),
|
|
color = "#FF000000",
|
|
widget = wibox.container.margin,
|
|
})
|
|
|
|
--- playerctl
|
|
--- -------------
|
|
playerctl_daemon:connect_signal("metadata", function(_, title, artist, album_path, _, _, _)
|
|
if title == "" then
|
|
title = "Nothing Playing"
|
|
end
|
|
if artist == "" then
|
|
artist = "Nothing Playing"
|
|
end
|
|
if album_path == "" then
|
|
album_path = theme.music
|
|
end
|
|
|
|
music_art:set_image(gears.surface.load_uncached(album_path))
|
|
music_title:set_markup_silently(helpers.ui.colorize_text(title, theme.color.subtext1))
|
|
music_artist:set_markup_silently(helpers.ui.colorize_text(artist, theme.color.blue))
|
|
end)
|
|
|
|
playerctl_daemon:connect_signal("playback_status", function(_, playing, _)
|
|
if playing then
|
|
music_text:set_markup_silently(helpers.ui.colorize_text("Now Playing", theme.color.overlay0))
|
|
toggle.markup = helpers.ui.colorize_text(config.icons.music.pause, theme.color.blue)
|
|
else
|
|
music_text:set_markup_silently(helpers.ui.colorize_text("Music", theme.color.overlay0))
|
|
toggle.markup = helpers.ui.colorize_text(config.icons.music.play, theme.color.blue)
|
|
end
|
|
end)
|
|
|
|
return music_widget
|