add full proj
This commit is contained in:
63
widgets/Volume.qml
Normal file
63
widgets/Volume.qml
Normal file
@@ -0,0 +1,63 @@
|
||||
import QtQuick
|
||||
import QtQuick.Layouts
|
||||
import Quickshell.Services.Pipewire
|
||||
import "../config"
|
||||
|
||||
// PipeWire default sink volume. Scroll to adjust, click to mute.
|
||||
MouseArea {
|
||||
id: root
|
||||
|
||||
readonly property var sink: Pipewire.defaultAudioSink
|
||||
readonly property var audio: sink ? sink.audio : null
|
||||
readonly property bool muted: audio ? audio.muted : true
|
||||
readonly property int volPct: audio ? Math.round(audio.volume * 100) : 0
|
||||
|
||||
implicitWidth: pill.implicitWidth
|
||||
implicitHeight: pill.implicitHeight
|
||||
cursorShape: Qt.PointingHandCursor
|
||||
acceptedButtons: Qt.LeftButton
|
||||
|
||||
onClicked: { if (audio) audio.muted = !audio.muted; }
|
||||
onWheel: wheel => {
|
||||
if (!audio) return;
|
||||
audio.volume = Math.max(0, Math.min(1,
|
||||
audio.volume + (wheel.angleDelta.y > 0 ? 0.05 : -0.05)));
|
||||
}
|
||||
|
||||
// keep the sink's audio properties live
|
||||
PwObjectTracker { objects: root.sink ? [root.sink] : [] }
|
||||
|
||||
Pill {
|
||||
id: pill
|
||||
anchors.fill: parent
|
||||
|
||||
Text {
|
||||
text: root.muted ? Icons.volMute
|
||||
: root.volPct < 50 ? Icons.volLow
|
||||
: Icons.volHigh
|
||||
font.family: Theme.monoFont
|
||||
font.pixelSize: Theme.fontSize + 1
|
||||
color: root.muted ? Theme.overlay : Theme.teal
|
||||
Layout.alignment: Qt.AlignVCenter
|
||||
Layout.preferredWidth: Theme.fontSize + 4
|
||||
horizontalAlignment: Text.AlignHCenter
|
||||
}
|
||||
|
||||
TextMetrics {
|
||||
id: volMetrics
|
||||
font: volText.font
|
||||
text: "muted"
|
||||
}
|
||||
|
||||
Text {
|
||||
id: volText
|
||||
text: root.muted ? "muted" : root.volPct + "%"
|
||||
font.family: Theme.font
|
||||
font.pixelSize: Theme.fontSize
|
||||
color: Theme.text
|
||||
horizontalAlignment: Text.AlignRight
|
||||
Layout.alignment: Qt.AlignVCenter
|
||||
Layout.preferredWidth: volMetrics.advanceWidth
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user