From 25d9eecfc68df3251dc96008aaa4cd7c81900da6 Mon Sep 17 00:00:00 2001 From: streetturtle Date: Fri, 19 Mar 2021 20:49:00 -0400 Subject: [volume] BREAKING CHANGE - new widget instead of old ones Having three widgets for volume led to a problem of code duplication - same logic was duplicated three times. However when an issue was discovered and fixed, it was fixed in only one of three widgets. So I decided to create a volume widget from scratch, adding new features, such as selecting input/output, better responsiveness, easily customizable widget ui (bar, text, icon, icon and text, arc). Should close #199, #198, #185, #182, #47, #122, #183. --- experiments/volume/README.md | 112 ----------- .../volume/icons/audio-volume-high-symbolic.svg | 88 --------- .../volume/icons/audio-volume-low-symbolic.svg | 88 --------- .../volume/icons/audio-volume-medium-symbolic.svg | 88 --------- .../volume/icons/audio-volume-muted-symbolic.svg | 88 --------- experiments/volume/screenshots/variations.png | Bin 9153 -> 0 bytes .../volume/screenshots/volume-sink-sources.png | Bin 74043 -> 0 bytes experiments/volume/utils.lua | 105 ---------- experiments/volume/volume-2.svg | 1 - experiments/volume/volume.lua | 218 --------------------- experiments/volume/widgets/arc-widget.lua | 46 ----- .../volume/widgets/horizontal-bar-widget.lua | 58 ------ .../volume/widgets/icon-and-text-widget.lua | 59 ------ experiments/volume/widgets/icon-widget.lua | 46 ----- experiments/volume/widgets/vertical-bar-widget.lua | 64 ------ 15 files changed, 1061 deletions(-) delete mode 100644 experiments/volume/README.md delete mode 100644 experiments/volume/icons/audio-volume-high-symbolic.svg delete mode 100644 experiments/volume/icons/audio-volume-low-symbolic.svg delete mode 100644 experiments/volume/icons/audio-volume-medium-symbolic.svg delete mode 100644 experiments/volume/icons/audio-volume-muted-symbolic.svg delete mode 100644 experiments/volume/screenshots/variations.png delete mode 100644 experiments/volume/screenshots/volume-sink-sources.png delete mode 100644 experiments/volume/utils.lua delete mode 100644 experiments/volume/volume-2.svg delete mode 100644 experiments/volume/volume.lua delete mode 100644 experiments/volume/widgets/arc-widget.lua delete mode 100644 experiments/volume/widgets/horizontal-bar-widget.lua delete mode 100644 experiments/volume/widgets/icon-and-text-widget.lua delete mode 100644 experiments/volume/widgets/icon-widget.lua delete mode 100644 experiments/volume/widgets/vertical-bar-widget.lua (limited to 'experiments') diff --git a/experiments/volume/README.md b/experiments/volume/README.md deleted file mode 100644 index 973bb49..0000000 --- a/experiments/volume/README.md +++ /dev/null @@ -1,112 +0,0 @@ -# Volume widget - -Volume widget based on [amixer](https://linux.die.net/man/1/amixer) (is used for controlling the audio volume) and [pacmd](https://linux.die.net/man/1/pacmd) (is used for selecting a sink/source). Also, the widget provides an easy way to customize how it looks, following types are supported out-of-the-box: - -![types](./screenshots/variations.png) - -From left to right: `horizontal_bar`, `vertical_bar`, `icon`, `icon_and_text`, `arc` - -A right-click on the widget opens a popup where you can choose a sink/source: -![sink-sources](./screenshots/volume-sink-sources.png) - -### Features - - - switch between sinks/sources by right clicking on the widget; - - more responsive than previous versions of volume widget, which were refreshed once a second; - - 5 predefined customizable looks; - -## Installation - -Clone the repo under **~/.config/awesome/** and add widget in **rc.lua**: - -```lua -local volume_widget = require('awesome-wm-widgets.experiments.volume.volume') -... -s.mytasklist, -- Middle widget - { -- Right widgets - layout = wibox.layout.fixed.horizontal, - ... - -- default - volume_widget(), - -- customized - volume_widget{ - type = 'arc' - }, -``` - -### Shortcuts - -To improve responsiveness of the widget when volume level is changed by a shortcut use corresponding methods of the widget: - -```lua -awful.key({ modkey }, "]", function() volume_widget:inc() end), -awful.key({ modkey }, "[", function() volume_widget:dec() end), -awful.key({ modkey }, "\\", function() volume_widget:toggle() end), -``` - -## Customization - -It is possible to customize the widget by providing a table with all or some of the following config parameters: - -### Generic parameter - -| Name | Default | Description | -|---|---|---| -| `type`| `icon_and_text`| Widget type, one of `horizontal_bar`, `vertical_bar`, `icon`, `icon_and_text`, `arc` | - -Depending on the chosen widget type add parameters from the corresponding section below: - -#### `icon` parameters - -| Name | Default | Description | -|---|---|---| -| `icon_dir`| `./icons`| Path to the folder with icons | - -_Note:_ if you are changing icons, the folder should contain following .svg images: - - audio-volume-high-symbolic - - audio-volume-medium-symbolic - - audio-volume-low-symbolic - - audio-volume-muted-symbolic - -#### `icon_and_text` parameters - -| Name | Default | Description | -|---|---|---| -| `icon_dir`| `./icons`| Path to the folder with icons | -| `font` | `beautiful.font` | Font name and size, like `Play 12` | - -#### `arc` parameters - -| Name | Default | Description | -|---|---|---| -| `thickness` | 2 | Thickness of the arc | -| `main_color` | `beautiful.fg_color` | Color of the arc | -| `bg_color` | `#ffffff11` | Color of the arc's background | -| `mute_color` | `beautiful.fg_urgent` | Color of the arc when mute | -| `size` | 18 | Size of the widget | - -#### `horizontal_bar` parameters - -| Name | Default | Description | -|---|---|---| -| `main_color` | `beautiful.fg_normal` | Color of the bar | -| `mute_color` | `beautiful.fg_urgent` | Color of the bar when mute | -| `bg_color` | `'#ffffff11'` | Color of the bar's background | -| `width` | `50` | The bar width | -| `margins` | `10` | Top and bottom margins (if your wibar is 22 px high, bar will be 2 px = 22 - 2*10) | -| `shape` | `'bar'` | [gears.shape](https://awesomewm.org/doc/api/libraries/gears.shape.html), could be `octogon`, `hexagon`, `powerline`, etc | -| `with_icon` | `true` | Show volume icon| - -_Note:_ I didn't figure out how does the `forced_height` property of progressbar widget work (maybe it doesn't work at all), thus there is a workaround with margins. - -#### `vertical_bar` parameters - -| Name | Default | Description | -|---|---|---| -| `main_color` | `beautiful.fg_normal` | Color of the bar | -| `mute_color` | `beautiful.fg_urgent` | Color of the bar when mute | -| `bg_color` | `'#ffffff11'` | Color of the bar's background | -| `width` | `10` | The bar width | -| `margins` | `20` | Top and bottom margins (if your wibar is 22 px high, bar will be 2 px = 22 - 2*10) | -| `shape` | `'bar'` | [gears.shape](https://awesomewm.org/doc/api/libraries/gears.shape.html), could be `octogon`, `hexagon`, `powerline`, etc | -| `with_icon` | `true` | Show volume icon| diff --git a/experiments/volume/icons/audio-volume-high-symbolic.svg b/experiments/volume/icons/audio-volume-high-symbolic.svg deleted file mode 100644 index 985c107..0000000 --- a/experiments/volume/icons/audio-volume-high-symbolic.svg +++ /dev/null @@ -1,88 +0,0 @@ - - - - - - image/svg+xml - - - - - - - - - - - - - - - diff --git a/experiments/volume/icons/audio-volume-low-symbolic.svg b/experiments/volume/icons/audio-volume-low-symbolic.svg deleted file mode 100644 index 7eb4531..0000000 --- a/experiments/volume/icons/audio-volume-low-symbolic.svg +++ /dev/null @@ -1,88 +0,0 @@ - - - - - - image/svg+xml - - - - - - - - - - - - - - - diff --git a/experiments/volume/icons/audio-volume-medium-symbolic.svg b/experiments/volume/icons/audio-volume-medium-symbolic.svg deleted file mode 100644 index 11e44fe..0000000 --- a/experiments/volume/icons/audio-volume-medium-symbolic.svg +++ /dev/null @@ -1,88 +0,0 @@ - - - - - - image/svg+xml - - - - - - - - - - - - - - - diff --git a/experiments/volume/icons/audio-volume-muted-symbolic.svg b/experiments/volume/icons/audio-volume-muted-symbolic.svg deleted file mode 100644 index e577d05..0000000 --- a/experiments/volume/icons/audio-volume-muted-symbolic.svg +++ /dev/null @@ -1,88 +0,0 @@ - - - - - - image/svg+xml - - - - - - - - - - - - - - - diff --git a/experiments/volume/screenshots/variations.png b/experiments/volume/screenshots/variations.png deleted file mode 100644 index 21d7ead..0000000 Binary files a/experiments/volume/screenshots/variations.png and /dev/null differ diff --git a/experiments/volume/screenshots/volume-sink-sources.png b/experiments/volume/screenshots/volume-sink-sources.png deleted file mode 100644 index 7d010bc..0000000 Binary files a/experiments/volume/screenshots/volume-sink-sources.png and /dev/null differ diff --git a/experiments/volume/utils.lua b/experiments/volume/utils.lua deleted file mode 100644 index 417a666..0000000 --- a/experiments/volume/utils.lua +++ /dev/null @@ -1,105 +0,0 @@ - - -local utils = {} - -local function split(string_to_split, separator) - if separator == nil then separator = "%s" end - local t = {} - - for str in string.gmatch(string_to_split, "([^".. separator .."]+)") do - table.insert(t, str) - end - - return t -end - -function utils.extract_sinks_and_sources(pacmd_output) - local sinks = {} - local sources = {} - local device - local properties - local ports - local in_sink = false - local in_source = false - local in_device = false - local in_properties = false - local in_ports = false - for line in pacmd_output:gmatch("[^\r\n]+") do - if string.match(line, 'source%(s%) available.') then - in_sink = false - in_source = true - end - if string.match(line, 'sink%(s%) available.') then - in_sink = true - in_source = false - end - - if string.match(line, 'index:') then - in_device = true - in_properties = false - device = { - id = line:match(': (%d+)'), - is_default = string.match(line, '*') ~= nil - } - if in_sink then - table.insert(sinks, device) - elseif in_source then - table.insert(sources, device) - end - end - - if string.match(line, '^\tproperties:') then - in_device = false - in_properties = true - properties = {} - device['properties'] = properties - end - - if string.match(line, 'ports:') then - in_device = false - in_properties = false - in_ports = true - ports = {} - device['ports'] = ports - end - - if string.match(line, 'active port:') then - in_device = false - in_properties = false - in_ports = false - device['active_port'] = line:match(': (.+)'):gsub('<',''):gsub('>','') - end - - if in_device then - local t = split(line, ': ') - local key = t[1]:gsub('\t+', ''):lower() - local value = t[2]:gsub('^<', ''):gsub('>$', '') - device[key] = value - end - - if in_properties then - local t = split(line, '=') - local key = t[1]:gsub('\t+', ''):gsub('%.', '_'):gsub('-', '_'):gsub(':', ''):gsub("%s+$", "") - local value - if t[2] == nil then - value = t[2] - else - value = t[2]:gsub('"', ''):gsub("^%s+", ""):gsub(' Analog Stereo', '') - end - properties[key] = value - end - - if in_ports then - local t = split(line, ': ') - local key = t[1] - if key ~= nil then - key = key:gsub('\t+', '') - end - ports[key] = t[2] - end - end - - return sinks, sources -end - -return utils \ No newline at end of file diff --git a/experiments/volume/volume-2.svg b/experiments/volume/volume-2.svg deleted file mode 100644 index 10f1c67..0000000 --- a/experiments/volume/volume-2.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/experiments/volume/volume.lua b/experiments/volume/volume.lua deleted file mode 100644 index 7bdda1c..0000000 --- a/experiments/volume/volume.lua +++ /dev/null @@ -1,218 +0,0 @@ -------------------------------------------------- --- The Ultimate Volume Widget for Awesome Window Manager --- More details could be found here: --- https://github.com/streetturtle/awesome-wm-widgets/tree/master/volume-widget - --- @author Pavel Makhov --- @copyright 2020 Pavel Makhov -------------------------------------------------- - -local awful = require("awful") -local wibox = require("wibox") -local spawn = require("awful.spawn") -local gears = require("gears") -local beautiful = require("beautiful") -local watch = require("awful.widget.watch") -local utils = require("awesome-wm-widgets.experiments.volume.utils") - - -local LIST_DEVICES_CMD = [[sh -c "pacmd list-sinks; pacmd list-sources"]] -local GET_VOLUME_CMD = 'amixer -D pulse sget Master' -local INC_VOLUME_CMD = 'amixer -D pulse sset Master 5%+' -local DEC_VOLUME_CMD = 'amixer -D pulse sset Master 5%-' -local TOG_VOLUME_CMD = 'amixer -D pulse sset Master toggle' - - -local widget_types = { - icon_and_text = require("awesome-wm-widgets.experiments.volume.widgets.icon-and-text-widget"), - icon = require("awesome-wm-widgets.experiments.volume.widgets.icon-widget"), - arc = require("awesome-wm-widgets.experiments.volume.widgets.arc-widget"), - horizontal_bar = require("awesome-wm-widgets.experiments.volume.widgets.horizontal-bar-widget"), - vertical_bar = require("awesome-wm-widgets.experiments.volume.widgets.vertical-bar-widget") -} -local volume = {} - -local rows = { layout = wibox.layout.fixed.vertical } - -local popup = awful.popup{ - bg = beautiful.bg_normal, - ontop = true, - visible = false, - shape = gears.shape.rounded_rect, - border_width = 1, - border_color = beautiful.bg_focus, - maximum_width = 400, - offset = { y = 5 }, - widget = {} -} - -local function build_main_line(device) - if device.active_port ~= nil and device.ports[device.active_port] ~= nil then - return device.properties.device_description .. ' ยท ' .. device.ports[device.active_port] - else - return device.properties.device_description - end -end - -local function build_rows(devices, on_checkbox_click, device_type) - local device_rows = { layout = wibox.layout.fixed.vertical } - for _, device in pairs(devices) do - - local checkbox = wibox.widget { - checked = device.is_default, - color = beautiful.bg_normal, - paddings = 2, - shape = gears.shape.circle, - forced_width = 20, - forced_height = 20, - check_color = beautiful.fg_urgent, - widget = wibox.widget.checkbox - } - - checkbox:connect_signal("button::press", function() - spawn.easy_async(string.format([[sh -c 'pacmd set-default-%s "%s"']], device_type, device.name), function() - on_checkbox_click() - end) - end) - - local row = wibox.widget { - { - { - { - checkbox, - valign = 'center', - layout = wibox.container.place, - }, - { - { - text = build_main_line(device), - align = 'left', - widget = wibox.widget.textbox - }, - left = 10, - layout = wibox.container.margin - }, - spacing = 8, - layout = wibox.layout.align.horizontal - }, - margins = 4, - layout = wibox.container.margin - }, - bg = beautiful.bg_normal, - widget = wibox.container.background - } - - row:connect_signal("mouse::enter", function(c) c:set_bg(beautiful.bg_focus) end) - row:connect_signal("mouse::leave", function(c) c:set_bg(beautiful.bg_normal) end) - - local old_cursor, old_wibox - row:connect_signal("mouse::enter", function() - local wb = mouse.current_wibox - old_cursor, old_wibox = wb.cursor, wb - wb.cursor = "hand1" - end) - row:connect_signal("mouse::leave", function() - if old_wibox then - old_wibox.cursor = old_cursor - old_wibox = nil - end - end) - - row:connect_signal("button::press", function() - spawn.easy_async(string.format([[sh -c 'pacmd set-default-%s "%s"']], device_type, device.name), function() - on_checkbox_click() - end) - end) - - table.insert(device_rows, row) - end - - return device_rows -end - -local function build_header_row(text) - return wibox.widget{ - { - markup = "" .. text .. "", - align = 'center', - widget = wibox.widget.textbox - }, - bg = beautiful.bg_normal, - widget = wibox.container.background - } -end - -local function rebuild_popup() - spawn.easy_async(LIST_DEVICES_CMD, function(stdout) - - local sinks, sources = utils.extract_sinks_and_sources(stdout) - - for i = 0, #rows do rows[i]=nil end - - table.insert(rows, build_header_row("SINKS")) - table.insert(rows, build_rows(sinks, function() rebuild_popup() end, "sink")) - table.insert(rows, build_header_row("SOURCES")) - table.insert(rows, build_rows(sources, function() rebuild_popup() end, "source")) - - popup:setup(rows) - end) -end - - -local function worker(user_args) - - local args = user_args or {} - - local widget_type = args.widget_type - local refresh_rate = args.refresh_rate or 1 - - if widget_types[widget_type] == nil then - volume.widget = widget_types['icon_and_text'].get_widget(user_args.icon_and_text_args) - else - volume.widget = widget_types[widget_type].get_widget(args) - end - - local function update_graphic(widget, stdout) - local mute = string.match(stdout, "%[(o%D%D?)%]") -- \[(o\D\D?)\] - [on] or [off] - if mute == 'off' then widget:mute() - elseif mute == 'on' then widget:unmute() - end - local volume_level = string.match(stdout, "(%d?%d?%d)%%") -- (\d?\d?\d)\%) - volume_level = string.format("% 3d", volume_level) - widget:set_volume_level(volume_level) - end - - function volume:inc() - spawn.easy_async(INC_VOLUME_CMD, function(stdout) update_graphic(volume.widget, stdout) end) - end - - function volume:dec() - spawn.easy_async(DEC_VOLUME_CMD, function(stdout) update_graphic(volume.widget, stdout) end) - end - - function volume:toggle() - spawn.easy_async(TOG_VOLUME_CMD, function(stdout) update_graphic(volume.widget, stdout) end) - end - - volume.widget:buttons( - awful.util.table.join( - awful.button({}, 3, function() - if popup.visible then - popup.visible = not popup.visible - else - rebuild_popup() - popup:move_next_to(mouse.current_widget_geometry) - end - end), - awful.button({}, 4, function() volume:inc() end), - awful.button({}, 5, function() volume:dec() end), - awful.button({}, 1, function() volume:toggle() end) - ) - ) - - watch(GET_VOLUME_CMD, refresh_rate, update_graphic, volume.widget) - - return volume.widget -end - -return setmetatable(volume, { __call = function(_, ...) return worker(...) end }) diff --git a/experiments/volume/widgets/arc-widget.lua b/experiments/volume/widgets/arc-widget.lua deleted file mode 100644 index b6c9d22..0000000 --- a/experiments/volume/widgets/arc-widget.lua +++ /dev/null @@ -1,46 +0,0 @@ -local wibox = require("wibox") -local beautiful = require('beautiful') - -local ICON_DIR = os.getenv("HOME") .. '/.config/awesome/awesome-wm-widgets/experiments/volume/icons/' - -local widget = {} - -function widget.get_widget(widgets_args) - local args = widgets_args or {} - - local thickness = args.thickness or 2 - local main_color = args.main_color or beautiful.fg_color - local bg_color = args.bg_color or '#ffffff11' - local mute_color = args.mute_color or beautiful.fg_urgent - local size = args.size or 18 - - return wibox.widget { - { - id = "icon", - image = ICON_DIR .. 'audio-volume-high-symbolic.svg', - resize = true, - widget = wibox.widget.imagebox, - }, - max_value = 100, - thickness = thickness, - start_angle = 4.71238898, -- 2pi*3/4 - forced_height = size, - forced_width = size, - bg = bg_color, - paddings = 2, - widget = wibox.container.arcchart, - set_volume_level = function(self, new_value) - self.value = new_value - end, - mute = function(self) - self.colors = { mute_color } - end, - unmute = function(self) - self.colors = { main_color } - end - } - -end - - -return widget \ No newline at end of file diff --git a/experiments/volume/widgets/horizontal-bar-widget.lua b/experiments/volume/widgets/horizontal-bar-widget.lua deleted file mode 100644 index 1a1c8a4..0000000 --- a/experiments/volume/widgets/horizontal-bar-widget.lua +++ /dev/null @@ -1,58 +0,0 @@ -local wibox = require("wibox") -local beautiful = require('beautiful') -local gears = require("gears") - -local ICON_DIR = os.getenv("HOME") .. '/.config/awesome/awesome-wm-widgets/experiments/volume/icons/' - -local widget = {} - -function widget.get_widget(widgets_args) - local args = widgets_args or {} - - local main_color = args.main_color or beautiful.fg_normal - local mute_color = args.mute_color or beautiful.fg_urgent - local bg_color = args.bg_color or '#ffffff11' - local width = args.width or 50 - local margins = args.margins or 10 - local shape = args.shape or 'bar' - local with_icon = args.with_icon == true and true or false - - local bar = wibox.widget { - { - { - id = "icon", - image = ICON_DIR .. 'audio-volume-high-symbolic.svg', - resize = false, - widget = wibox.widget.imagebox, - }, - valign = 'center', - visible = with_icon, - layout = wibox.container.place, - }, - { - id = 'bar', - max_value = 100, - forced_width = width, - color = main_color, - margins = { top = margins, bottom = margins }, - background_color = bg_color, - shape = gears.shape[shape], - widget = wibox.widget.progressbar, - }, - spacing = 4, - layout = wibox.layout.fixed.horizontal, - set_volume_level = function(self, new_value) - self:get_children_by_id('bar')[1]:set_value(tonumber(new_value)) - end, - mute = function(self) - self:get_children_by_id('bar')[1]:set_color(mute_color) - end, - unmute = function(self) - self:get_children_by_id('bar')[1]:set_color(main_color) - end - } - - return bar -end - -return widget diff --git a/experiments/volume/widgets/icon-and-text-widget.lua b/experiments/volume/widgets/icon-and-text-widget.lua deleted file mode 100644 index 0ee8d16..0000000 --- a/experiments/volume/widgets/icon-and-text-widget.lua +++ /dev/null @@ -1,59 +0,0 @@ -local wibox = require("wibox") -local beautiful = require('beautiful') - -local widget = {} - -local ICON_DIR = os.getenv("HOME") .. '/.config/awesome/awesome-wm-widgets/experiments/volume/icons/' - -function widget.get_widget(widgets_args) - local args = widgets_args or {} - - local font = args.font or beautiful.font - local icon_dir = args.icon_dir or ICON_DIR - - return wibox.widget { - { - { - id = "icon", - resize = false, - widget = wibox.widget.imagebox, - }, - valign = 'center', - layout = wibox.container.place - }, - { - id = 'txt', - font = font, - widget = wibox.widget.textbox - }, - layout = wibox.layout.fixed.horizontal, - set_volume_level = function(self, new_value) - self:get_children_by_id('txt')[1]:set_text(new_value) - local volume_icon_name - if self.is_muted then - volume_icon_name = 'audio-volume-muted-symbolic' - else - local new_value_num = tonumber(new_value) - if (new_value_num >= 0 and new_value_num < 33) then - volume_icon_name="audio-volume-low-symbolic" - elseif (new_value_num < 66) then - volume_icon_name="audio-volume-medium-symbolic" - else - volume_icon_name="audio-volume-high-symbolic" - end - end - self:get_children_by_id('icon')[1]:set_image(icon_dir .. volume_icon_name .. '.svg') - end, - mute = function(self) - self.is_muted = true - self:get_children_by_id('icon')[1]:set_image(icon_dir .. 'audio-volume-muted-symbolic.svg') - end, - unmute = function(self) - self.is_muted = false - end - } - -end - - -return widget \ No newline at end of file diff --git a/experiments/volume/widgets/icon-widget.lua b/experiments/volume/widgets/icon-widget.lua deleted file mode 100644 index f2aca26..0000000 --- a/experiments/volume/widgets/icon-widget.lua +++ /dev/null @@ -1,46 +0,0 @@ -local wibox = require("wibox") - -local widget = {} - -local ICON_DIR = os.getenv("HOME") .. '/.config/awesome/awesome-wm-widgets/experiments/volume/icons/' - -function widget.get_widget(widgets_args) - local args = widgets_args or {} - - local icon_dir = args.icon_dir or ICON_DIR - - return wibox.widget { - { - id = "icon", - resize = false, - widget = wibox.widget.imagebox, - }, - valign = 'center', - layout = wibox.container.place, - set_volume_level = function(self, new_value) - local volume_icon_name - if self.is_muted then - volume_icon_name = 'audio-volume-muted-symbolic' - else - local new_value_num = tonumber(new_value) - if (new_value_num >= 0 and new_value_num < 33) then - volume_icon_name="audio-volume-low-symbolic" - elseif (new_value_num < 66) then - volume_icon_name="audio-volume-medium-symbolic" - else - volume_icon_name="audio-volume-high-symbolic" - end - end - self:get_children_by_id('icon')[1]:set_image(icon_dir .. volume_icon_name .. '.svg') - end, - mute = function(self) - self.is_muted = true - self:get_children_by_id('icon')[1]:set_image(icon_dir .. 'audio-volume-muted-symbolic.svg') - end, - unmute = function(self) - self.is_muted = false - end - } -end - -return widget \ No newline at end of file diff --git a/experiments/volume/widgets/vertical-bar-widget.lua b/experiments/volume/widgets/vertical-bar-widget.lua deleted file mode 100644 index 82f4b8a..0000000 --- a/experiments/volume/widgets/vertical-bar-widget.lua +++ /dev/null @@ -1,64 +0,0 @@ -local wibox = require("wibox") -local beautiful = require('beautiful') -local gears = require("gears") - -local ICON_DIR = os.getenv("HOME") .. '/.config/awesome/awesome-wm-widgets/experiments/volume/icons/' - -local widget = {} - -function widget.get_widget(widgets_args) - local args = widgets_args or {} - - local main_color = args.main_color or beautiful.fg_normal - local mute_color = args.mute_color or beautiful.fg_urgent - local bg_color = args.bg_color or '#ffffff11' - local width = args.width or 10 - local margins = args.height or 2 - local shape = args.shape or 'bar' - local with_icon = args.with_icon == true and true or false - - local bar = wibox.widget { - { - { - id = "icon", - image = ICON_DIR .. 'audio-volume-high-symbolic.svg', - resize = false, - widget = wibox.widget.imagebox, - }, - valign = 'center', - visible = with_icon, - layout = wibox.container.place, - }, - { - { - id = 'bar', - max_value = 100, - forced_width = width, - forced_height = 5, - margins = { top = margins, bottom = margins }, - color = main_color, - background_color = bg_color, - shape = gears.shape[shape], - widget = wibox.widget.progressbar, - }, - forced_width = width, - direction = 'east', - layout = wibox.container.rotate, - }, - spacing = 4, - layout = wibox.layout.fixed.horizontal, - set_volume_level = function(self, new_value) - self:get_children_by_id('bar')[1]:set_value(tonumber(new_value)) - end, - mute = function(self) - self:get_children_by_id('bar')[1]:set_color(mute_color) - end, - unmute = function(self) - self:get_children_by_id('bar')[1]:set_color(main_color) - end - } - - return bar -end - -return widget -- cgit v1.2.3