Files
Quickbar/AudioWidget.qml

108 lines
2.7 KiB
QML

import QtQuick
import Quickshell.Io
import Quickshell.Services.Pipewire
import qs.Common
import qs.Common.Styled
import qs.Services
BackgroundRectangle {
id: root
property string monitor: ""
property string icon: " "
property bool audioPipewireActive: Pipewire.defaultAudioSink ? true : false
property var sink: audioPipewireActive ? Pipewire.defaultAudioSink : null
property int volume: audioPipewireActive ? Math.round(sink.audio.volume * 100) : 30
implicitWidth: audioText.implicitWidth * 1.6
implicitHeight: Theme.heightGaps
states: [
State {
name: "Mute"
when: root.volume == 0 || root.sink.audio.muted
PropertyChanges {
root.icon: " "
}
},
State {
name: "low volume"
when: root.volume <= 25
PropertyChanges {
root.icon: " "
}
},
State {
name: "high volume"
when: root.volume > 25
PropertyChanges {
root.icon: " "
}
}
]
PwObjectTracker {
objects: [Pipewire.defaultAudioSink]
}
Connections {
function onVolumeChanged() {
root.volume = Math.round(Pipewire.defaultAudioSink.audio.volume * 100);
}
target: root.audioPipewireActive ? Pipewire.defaultAudioSink.audio : null
}
StyledText {
id: audioText
property string audioTextText: root.audioPipewireActive ? root.icon + " " + Math.round(Pipewire.defaultAudioSink.audio.volume * 100).toString() + "%" : ""
anchors.centerIn: parent
text: audioTextText
}
Process {
id: rootProcess
running: false
command: ["pavucontrol"]
}
MouseArea {
anchors.fill: parent
acceptedButtons: Qt.LeftButton | Qt.RightButton
hoverEnabled: true
onEntered: {
PopUpHover.start(root, "audio");
}
onExited: {
// PopUpHover.exit()
PopUpHover.exit();
}
onClicked: mouse => {
if (mouse.button === Qt.RightButton) {
parent.sink.audio.muted = !parent.sink.audio.muted;
} else if (mouse.button === Qt.LeftButton) {
rootProcess.startDetached();
}
}
onWheel: wheel => {
if (wheel.angleDelta.y > 0) {
if (0)
return;
Pipewire.defaultAudioSink.audio.volume = (root.volume + 5) / 100;
} else if (wheel.angleDelta.y < 0) {
if (0)
return;
Pipewire.defaultAudioSink.audio.volume = (root.volume - 5) / 100;
}
}
}
}