Files
linux-dotfiles/quickshell/ui/AudioIcon.qml
2026-05-31 21:43:28 +02:00

65 lines
1.6 KiB
QML

import Quickshell
import Quickshell.Io
import QtQuick
import QtQuick.Layouts
import "../constants"
import "../services"
Text {
id: root
required property TopBar parentWindow
property string volumeText: ""
property list<string> volumeDudes: ["⸝(°-°)⸜","ヽ(°∘°)ノ","ヽ(°o°)ノ","ヽ(°O°)ノ","ヽ(°ᗜ°)ノ","ヽ(°〇°)ノ","ᕙ( ᗒᗣᗕ )ᕗ"]
property int volumeDudeIndex: 0
property int dudeStep: 100 / volumeDudes.length
property AudioService audioService: AudioService {
onVolumeChanged: function (volume) {
root.changeVolume(volume);
}
}
function changeVolume(volume) {
var dudeIndex = Math.min(Math.floor(volume / root.dudeStep), root.volumeDudes.length - 1);
root.text = volume + "% " + root.volumeDudes[dudeIndex];
volumeText = volume + "% " + root.volumeDudes[dudeIndex];
}
text: volumeText
color: Colors.md3.on_primary_fixed
font {
family: Constants.fontFamily
pixelSize: Constants.fontSize
bold: false
}
MouseArea {
anchors.fill: parent
hoverEnabled: true
onClicked: {
pavuControlProcess.running = true;
}
onWheel: function (wheel) {
if (wheel.angleDelta.y > 0) {
root.audioService.volumeUp();
} else {
root.audioService.volumeDown();
}
}
}
Process {
id: pavuControlProcess
command: ["pavucontrol"]
}
Component.onCompleted: {
root.audioService.volumeUp(); // trigger initial volume fetch
}
}