mirror of
https://github.com/AvengeMedia/DankMaterialShell.git
synced 2025-12-06 05:25:41 -05:00
82 lines
2.7 KiB
QML
82 lines
2.7 KiB
QML
import QtQuick
|
|
import QtQuick.Controls
|
|
import Quickshell
|
|
import Quickshell.Services.Pipewire
|
|
import qs.Common
|
|
import qs.Services
|
|
import qs.Widgets
|
|
|
|
Row {
|
|
id: root
|
|
|
|
property var defaultSource: AudioService.source
|
|
property color sliderTrackColor: "transparent"
|
|
|
|
height: 40
|
|
spacing: 0
|
|
|
|
Rectangle {
|
|
width: Theme.iconSize + Theme.spacingS * 2
|
|
height: Theme.iconSize + Theme.spacingS * 2
|
|
anchors.verticalCenter: parent.verticalCenter
|
|
radius: (Theme.iconSize + Theme.spacingS * 2) / 2
|
|
color: iconArea.containsMouse ? Qt.rgba(Theme.primary.r, Theme.primary.g, Theme.primary.b, 0.12) : Theme.withAlpha(Theme.primary, 0)
|
|
|
|
MouseArea {
|
|
id: iconArea
|
|
anchors.fill: parent
|
|
visible: defaultSource !== null
|
|
hoverEnabled: true
|
|
cursorShape: Qt.PointingHandCursor
|
|
onClicked: {
|
|
if (defaultSource) {
|
|
AudioService.suppressOSD = true
|
|
defaultSource.audio.muted = !defaultSource.audio.muted
|
|
AudioService.suppressOSD = false
|
|
}
|
|
}
|
|
}
|
|
|
|
DankIcon {
|
|
anchors.centerIn: parent
|
|
name: {
|
|
if (!defaultSource) return "mic_off"
|
|
|
|
let volume = defaultSource.audio.volume
|
|
let muted = defaultSource.audio.muted
|
|
|
|
if (muted || volume === 0.0) return "mic_off"
|
|
return "mic"
|
|
}
|
|
size: Theme.iconSize
|
|
color: defaultSource && !defaultSource.audio.muted && defaultSource.audio.volume > 0 ? Theme.primary : Theme.surfaceText
|
|
}
|
|
}
|
|
|
|
DankSlider {
|
|
readonly property real actualVolumePercent: defaultSource ? Math.round(defaultSource.audio.volume * 100) : 0
|
|
|
|
anchors.verticalCenter: parent.verticalCenter
|
|
width: parent.width - (Theme.iconSize + Theme.spacingS * 2)
|
|
enabled: defaultSource !== null
|
|
minimum: 0
|
|
maximum: 100
|
|
value: defaultSource ? Math.min(100, Math.round(defaultSource.audio.volume * 100)) : 0
|
|
showValue: true
|
|
unit: "%"
|
|
valueOverride: actualVolumePercent
|
|
thumbOutlineColor: Theme.surfaceContainer
|
|
trackColor: root.sliderTrackColor.a > 0 ? root.sliderTrackColor : Theme.withAlpha(Theme.surfaceContainerHigh, Theme.popupTransparency)
|
|
onIsDraggingChanged: {
|
|
AudioService.suppressOSD = isDragging
|
|
}
|
|
onSliderValueChanged: function(newValue) {
|
|
if (defaultSource) {
|
|
defaultSource.audio.volume = newValue / 100.0
|
|
if (newValue > 0 && defaultSource.audio.muted) {
|
|
defaultSource.audio.muted = false
|
|
}
|
|
}
|
|
}
|
|
}
|
|
} |