dotfiles/awes2/widget/music/music-box.lua

171 lines
3.8 KiB
Lua
Executable file

-- # # ######
-- ## ## # # #### # #### # # #### # #
-- # # # # # # # # # # # # # # # #
-- # # # # # #### # # ###### # # ##
-- # # # # # # # # # # # ##
-- # # # # # # # # # # # # # # #
-- # # #### #### # #### ###### #### # #
-- Creates the music box widget here
local awful = require('awful')
local wibox = require('wibox')
local gears = require('gears')
local beautiful = require('beautiful')
local dpi = beautiful.xresources.apply_dpi
local music_func = {}
screen.connect_signal("request::desktop_decoration", function(s)
-- Set music box geometry
local music_box_margin = dpi(5)
local music_box_height = dpi(375)
local music_box_width = dpi(260)
local music_box_x = nil
s.musicpop = awful.popup {
widget = {
-- Removing this block will cause an error...
},
ontop = true,
visible = false,
type = 'dock',
screen = s,
width = music_box_width,
height = music_box_height,
maximum_width = music_box_width,
maximum_height = music_box_height,
offset = dpi(5),
shape = gears.shape.rectangle,
bg = beautiful.transparent,
preferred_anchors = {'middle', 'back', 'front'},
preferred_positions = {'left', 'right', 'top', 'bottom'},
}
local ui_content = require('widget.music.content')
s.album = ui_content.album_cover
s.progress_bar = ui_content.progress_bar
s.time_track = ui_content.track_time.time_track
s.song_info = ui_content.song_info.music_info
s.media_buttons = ui_content.media_buttons.navigate_buttons
s.volume_slider = ui_content.volume_slider.vol_slider
s.musicpop : setup {
{
{
layout = wibox.layout.fixed.vertical,
expand = 'none',
spacing = dpi(8),
{
s.album,
bottom = dpi(5),
widget = wibox.container.margin,
},
{
layout = wibox.layout.fixed.vertical,
{
spacing = dpi(4),
layout = wibox.layout.fixed.vertical,
s.progress_bar,
s.time_track,
},
s.song_info,
s.media_buttons,
s.volume_slider,
},
},
top = dpi(15),
left = dpi(15),
right = dpi(15),
widget = wibox.container.margin
},
bg = beautiful.background,
shape = function(cr, width, height)
gears.shape.partially_rounded_rect(
cr, width, height, true, true, true, true, beautiful.groups_radius
)
end,
widget = wibox.container.background()
}
s.backdrop_music = wibox {
ontop = true,
visible = false,
screen = s,
type = 'utility',
input_passthrough = false,
bg = beautiful.transparent,
x = s.geometry.x,
y = s.geometry.y,
width = s.geometry.width,
height = s.geometry.height
}
local toggle_music_box = function(type)
local focused = awful.screen.focused()
local music_box = focused.musicpop
local music_backdrop = focused.backdrop_music
if music_box.visible then
music_backdrop.visible = not music_backdrop.visible
music_box.visible = not music_box.visible
else
if type == 'keyboard' then
music_backdrop.visible = true
music_box.visible = true
awful.placement.top_right(music_box, { margins = {
top = dpi(5),
right = dpi(music_box_x or 5)
},
honor_workarea = true
})
else
local widget_button = mouse.current_widget_geometry
music_backdrop.visible = true
music_box:move_next_to(widget_button)
music_box_x = (focused.geometry.width - music_box.x) - music_box_width
end
end
end
awesome.connect_signal(
'widget::music',
function(type)
toggle_music_box(type)
end
)
s.backdrop_music:buttons(
awful.util.table.join(
awful.button(
{},
1,
nil,
function()
toggle_music_box()
end
)
)
)
end)
music_func.toggle_music_box = toggle_music_box
local mpd_updater = require('widget.music.mpd-music-updater')
return music_func