aboutsummaryrefslogtreecommitdiff
path: root/.config/awesome/ui/statusbar/panel/widgets/displays.lua
blob: cd05253d784f27af69a52e0bf41572adac342318 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
local qmath = require "quarrel.math"
local qvars = require "quarrel.vars"
local qui = require "quarrel.ui"
local wibox = require "wibox"
local phosphor = require "assets.phosphor"
local gcolor = require "gears.color"

local function create_display(icon, color)
    return wibox.widget(qui.styled {
        widget = wibox.container.background,
        {
            widget = wibox.container.margin,
            margins = qvars.big_padding,
            {
                widget = wibox.container.place,
                {
                    {
                        widget = wibox.container.radialprogressbar,
                        max_value = 100,
                        border_color = qvars.colors.black,
                        color = color,
                        border_width = qvars.border_width * 2,
                        forced_height = qvars.element_size * 4,
                        forced_width = qvars.element_size * 4,
                        {
                            widget = wibox.container.place,
                            {
                                widget = wibox.widget.imagebox,
                                image = icon,
                                forced_height = qvars.char_height,
                                forced_width = qvars.char_height,
                                id = "icon"
                            }
                        },
                        id = "indicator"
                    },
                    {
                        widget = wibox.container.place,
                        {
                            widget = wibox.widget.textbox,
                            text = "0%",
                            id = "text"
                        }
                    },
                    layout = wibox.layout.fixed.vertical,
                    spacing = qvars.big_padding
                }
            }
        }
    })
end

local d_battery = create_display(gcolor.recolor_image(phosphor.battery_vertical_warning_fill, qvars.colors.fg), qvars.colors.red)

awesome.connect_signal("services::battery", function(capacity, status)
    local icon_data = status == "Charging" and { "charging", "green" } or qmath.step_value(capacity, {
        { 0, { "empty", "red" } },
        { 20, { "low", "red" } },
        { 40, { "medium", "yellow" } },
        { 60, { "high", "green" } },
        { 80, { "full", "green" } },
        { 100 }
    })

    d_battery:get_children_by_id("indicator")[1].color = qvars.colors[icon_data[2]]
    d_battery:get_children_by_id("indicator")[1].value = capacity
    d_battery:get_children_by_id("icon")[1].image = gcolor.recolor_image(phosphor["battery_vertical_" .. icon_data[1] .. "_fill"], qvars.colors[icon_data[2]])

    d_battery:get_children_by_id("text")[1].text = capacity .. "%"
end)

local d_volume = create_display(gcolor.recolor_image(phosphor.speaker_simple_high_fill, qvars.colors.fg), qvars.colors.fg)

awesome.connect_signal("services::audio", function(volume, muted)
    d_volume:get_children_by_id("indicator")[1].value = math.min(volume, 100)
    d_volume:get_children_by_id("text")[1].text = volume .. "%"

    if muted then
        d_volume:get_children_by_id("icon")[1].image = gcolor.recolor_image(phosphor["speaker_simple_x_fill"], qvars.colors.red)
        return
    end

    local icon_data = qmath.step_value(volume, {
        { 0, "slash" },
        { 25, "none" },
        { 50, "low" },
        { 75, "high" },
        { 100 }
    })

    d_volume:get_children_by_id("icon")[1].image = gcolor.recolor_image(phosphor["speaker_simple_" .. icon_data .. "_fill"], qvars.colors.fg)
end)

local d_brightness = create_display(gcolor.recolor_image(phosphor.sun_fill, qvars.colors.fg), qvars.colors.fg)

awesome.connect_signal("services::brightness", function(brightness)
    brightness = math.floor(qmath.translate_range(brightness, 0, 255, 0, 100))

    d_brightness:get_children_by_id("indicator")[1].value = brightness

    d_brightness:get_children_by_id("text")[1].text = brightness .. "%"
end)

return { battery = d_battery, volume = d_volume, brightness = d_brightness }