local awful = require('awful') local gears = require('gears') local wibox = require('wibox') local beautiful = require('beautiful') local dpi = beautiful.xresources.apply_dpi local clickable_container = require('widget.clickable-container') local config_dir = gears.filesystem.get_configuration_dir() local widget_icon_dir = config_dir .. 'widget/screen-recorder/icons/' local record_tbl = {} -- Panel UI record_tbl.screen_rec_toggle_imgbox = wibox.widget { image = widget_icon_dir .. 'start-recording-button' .. '.svg', resize = true, widget = wibox.widget.imagebox } record_tbl.screen_rec_toggle_button = wibox.widget { { record_tbl.screen_rec_toggle_imgbox, margins = dpi(7), widget = wibox.container.margin }, widget = clickable_container } record_tbl.screen_rec_countdown_txt = wibox.widget { id = 'countdown_text', font = 'SF Pro Text Bold 64', text = '4', align = 'center', valign = 'bottom', opacity = 0.0, widget = wibox.widget.textbox } record_tbl.screen_rec_main_imgbox = wibox.widget { image = widget_icon_dir .. 'recorder-off' .. '.svg', resize = true, widget = wibox.widget.imagebox } record_tbl.screen_rec_main_button = wibox.widget { { { { record_tbl.screen_rec_main_imgbox, margins = dpi(24), widget = wibox.container.margin }, widget = clickable_container }, forced_width = dpi(200), forced_height = dpi(200), bg = beautiful.groups_bg, shape = gears.shape.circle, widget = wibox.container.background }, margins = dpi(24), widget = wibox.container.margin } record_tbl.screen_rec_audio_imgbox = wibox.widget { image = widget_icon_dir .. 'audio' .. '.svg', resize = true, widget = wibox.widget.imagebox } record_tbl.screen_rec_audio_button = wibox.widget { { nil, { { record_tbl.screen_rec_audio_imgbox, margins = dpi(16), widget = wibox.container.margin }, widget = clickable_container }, nil, expand = 'none', layout = wibox.layout.align.vertical }, forced_width = dpi(60), forced_height = dpi(60), bg = beautiful.groups_bg, shape = gears.shape.circle, widget = wibox.container.background } record_tbl.screen_rec_close_imgbox = wibox.widget { image = widget_icon_dir .. 'close-screen' .. '.svg', resize = true, widget = wibox.widget.imagebox } record_tbl.screen_rec_close_button = wibox.widget { { nil, { { record_tbl.screen_rec_close_imgbox, margins = dpi(16), widget = wibox.container.margin }, widget = clickable_container }, nil, expand = 'none', layout = wibox.layout.align.horizontal }, forced_width = dpi(60), forced_height = dpi(60), bg = beautiful.groups_bg, shape = gears.shape.circle, widget = wibox.container.background } record_tbl.screen_rec_settings_imgbox = wibox.widget { image = widget_icon_dir .. 'settings' .. '.svg', resize = true, widget = wibox.widget.imagebox } record_tbl.screen_rec_settings_button = wibox.widget { { nil, { { record_tbl.screen_rec_settings_imgbox, margins = dpi(16), widget = wibox.container.margin }, widget = clickable_container }, nil, expand = 'none', layout = wibox.layout.align.vertical }, forced_width = dpi(60), forced_height = dpi(60), bg = beautiful.groups_bg, shape = gears.shape.circle, widget = wibox.container.background } record_tbl.screen_rec_back_imgbox = wibox.widget { image = widget_icon_dir .. 'back' .. '.svg', resize = true, widget = wibox.widget.imagebox } record_tbl.screen_rec_back_button = wibox.widget { { nil, { { record_tbl.screen_rec_back_imgbox, margins = dpi(16), widget = wibox.container.margin }, widget = clickable_container }, nil, expand = 'none', layout = wibox.layout.align.vertical }, forced_width = dpi(48), forced_height = dpi(48), bg = beautiful.groups_bg, shape = function(cr, width, height) gears.shape.rounded_rect(cr, width, height, beautiful.groups_radius) end, widget = wibox.container.background } record_tbl.screen_rec_back_txt = wibox.widget { { text = 'Back', font = 'SF Pro Display Bold 16', align = 'left', valign = 'center', widget = wibox.widget.textbox }, margins = dpi(5), widget = wibox.container.margin } record_tbl.screen_rec_res_txt = wibox.widget { { text = 'Resolution', font = 'SF Pro Display Bold 16', align = 'left', valign = 'center', widget = wibox.widget.textbox }, margins = dpi(5), widget = wibox.container.margin } record_tbl.screen_rec_res_txtbox = wibox.widget { { { { id = 'res_tbox', markup = '' .. '1366x768' .. "", font = 'SF Pro Display Bold 16', align = 'left', valign = 'center', widget = wibox.widget.textbox }, margins = dpi(5), widget = wibox.container.margin }, widget = clickable_container }, forced_width = dpi(60), forced_height = dpi(60), bg = beautiful.groups_bg, shape = function(cr, width, height) gears.shape.rounded_rect(cr, width, height, beautiful.groups_radius) end, widget = wibox.container.background } record_tbl.screen_rec_offset_txt = wibox.widget { { text = 'Offset', font = 'SF Pro Display Bold 16', align = 'left', valign = 'center', widget = wibox.widget.textbox }, margins = dpi(5), widget = wibox.container.margin } record_tbl.screen_rec_offset_txtbox = wibox.widget { { { { id = 'offset_tbox', markup = '' .. '0,0' .. "", font = 'SF Pro Display Bold 16', ellipsize = 'start', align = 'left', valign = 'center', widget = wibox.widget.textbox }, margins = dpi(5), widget = wibox.container.margin }, widget = clickable_container }, forced_width = dpi(60), forced_height = dpi(60), bg = beautiful.groups_bg, shape = function(cr, width, height) gears.shape.rounded_rect(cr, width, height, beautiful.groups_radius) end, widget = wibox.container.background } screen.connect_signal("request::desktop_decoration", function(s) s.recorder_screen = wibox ({ ontop = true, screen = s, type = 'dock', height = s.geometry.height, width = s.geometry.width, x = s.geometry.x, y = s.geometry.y, bg = beautiful.background, fg = beautiful.fg_normal }) s.recorder_screen : setup { layout = wibox.layout.stack, { id = 'recorder_panel', visible = true, layout = wibox.layout.align.vertical, expand = 'none', nil, { layout = wibox.layout.align.horizontal, expand = 'none', nil, { layout = wibox.layout.fixed.vertical, record_tbl.screen_rec_countdown_txt, { layout = wibox.layout.align.horizontal, record_tbl.screen_rec_settings_button, record_tbl.screen_rec_main_button, record_tbl.screen_rec_audio_button }, record_tbl.screen_rec_close_button, }, nil }, nil }, { id = 'recorder_settings', visible = false, layout = wibox.layout.align.vertical, expand = 'none', nil, { layout = wibox.layout.align.horizontal, expand = 'none', nil, { layout = wibox.layout.fixed.vertical, forced_width = dpi(240), spacing = dpi(10), { layout = wibox.layout.fixed.horizontal, spacing = dpi(10), record_tbl.screen_rec_back_button, record_tbl.screen_rec_back_txt, }, record_tbl.screen_rec_res_txt, record_tbl.screen_rec_res_txtbox, record_tbl.screen_rec_offset_txt, record_tbl.screen_rec_offset_txtbox }, nil }, nil } } end) return record_tbl