2023-10-15 00:16:19 +01:00
|
|
|
import { Box, Button, Icon, Label, Stack } from 'resource:///com/github/Aylur/ags/widget.js';
|
|
|
|
import Audio from 'resource:///com/github/Aylur/ags/service/audio.js';
|
|
|
|
|
|
|
|
export default () => Button({
|
2023-10-12 20:52:06 +01:00
|
|
|
className: 'volume',
|
2023-10-15 00:16:19 +01:00
|
|
|
onScrollUp: () => execAsync('pamixer -i 10'),
|
|
|
|
onScrollDown: () => execAsync('pamixer -d 10'),
|
|
|
|
|
|
|
|
child: Box({
|
2023-10-12 20:52:06 +01:00
|
|
|
children: [
|
2023-10-15 00:16:19 +01:00
|
|
|
Stack({
|
2023-10-12 20:52:06 +01:00
|
|
|
items: [
|
|
|
|
// tuples of [string, Widget]
|
2023-10-15 00:16:19 +01:00
|
|
|
['67', Icon('audio-volume-high-symbolic')],
|
|
|
|
['34', Icon('audio-volume-medium-symbolic')],
|
|
|
|
['1', Icon('audio-volume-low-symbolic')],
|
|
|
|
['0', Icon('audio-volume-muted-symbolic')],
|
2023-10-12 20:52:06 +01:00
|
|
|
],
|
2023-10-15 00:16:19 +01:00
|
|
|
connections: [
|
|
|
|
[Audio, stack => {
|
|
|
|
if (!Audio.speaker)
|
|
|
|
return;
|
2023-10-12 20:52:06 +01:00
|
|
|
|
2023-10-15 00:16:19 +01:00
|
|
|
if (Audio.speaker.isMuted) {
|
|
|
|
stack.shown = '0';
|
|
|
|
return;
|
|
|
|
}
|
2023-10-12 20:52:06 +01:00
|
|
|
|
2023-10-15 00:16:19 +01:00
|
|
|
const show = [101, 67, 34, 1, 0].find(
|
|
|
|
threshold => threshold <= Audio.speaker.volume * 100);
|
2023-10-12 20:52:06 +01:00
|
|
|
|
2023-10-15 00:16:19 +01:00
|
|
|
stack.shown = `${show}`;
|
|
|
|
}, 'speaker-changed']
|
|
|
|
],
|
2023-10-12 20:52:06 +01:00
|
|
|
}),
|
|
|
|
|
2023-10-15 00:16:19 +01:00
|
|
|
Label({
|
|
|
|
connections: [
|
|
|
|
[Audio, label => {
|
|
|
|
if (!Audio.speaker)
|
|
|
|
return;
|
2023-10-12 20:52:06 +01:00
|
|
|
|
2023-10-15 00:16:19 +01:00
|
|
|
label.label = ` ${Math.floor((Audio.speaker.volume * 100) / 10) * 10}%`; // round down to nearest 10
|
|
|
|
}, 'speaker-changed']
|
|
|
|
],
|
2023-10-12 20:52:06 +01:00
|
|
|
}),
|
|
|
|
],
|
|
|
|
}),
|
|
|
|
});
|