1
0
mirror of https://github.com/AvengeMedia/DankMaterialShell.git synced 2025-12-05 21:15:38 -05:00
Files
DankMaterialShell/quickshell/Modules/OSD/AudioOutputOSD.qml
2025-12-03 20:47:57 -05:00

81 lines
2.1 KiB
QML

import QtQuick
import qs.Common
import qs.Services
import qs.Widgets
DankOSD {
id: root
property string deviceName: ""
property string deviceIcon: "speaker"
osdWidth: Math.min(Math.max(120, Theme.iconSize + textMetrics.width + Theme.spacingS * 4), Screen.width - Theme.spacingM * 2)
osdHeight: 40 + Theme.spacingS * 2
autoHideInterval: 2500
enableMouseInteraction: false
TextMetrics {
id: textMetrics
font.pixelSize: Theme.fontSizeMedium
font.weight: Font.Medium
font.family: Theme.fontFamily
text: root.deviceName
}
function getIconForSink(sink) {
if (!sink)
return "speaker";
const name = sink.name || "";
if (name.includes("bluez"))
return "headset";
if (name.includes("hdmi"))
return "tv";
if (name.includes("usb"))
return "headset";
return "speaker";
}
Connections {
target: AudioService
function onAudioOutputCycled(name) {
if (!SettingsData.osdAudioOutputEnabled)
return;
root.deviceName = name;
root.deviceIcon = getIconForSink(AudioService.sink);
root.show();
}
}
content: Item {
property int gap: Theme.spacingS
anchors.centerIn: parent
width: parent.width - Theme.spacingS * 2
height: 40
DankIcon {
id: iconItem
width: Theme.iconSize
height: Theme.iconSize
x: parent.gap
anchors.verticalCenter: parent.verticalCenter
name: root.deviceIcon
size: Theme.iconSize
color: Theme.primary
}
StyledText {
id: textItem
x: parent.gap * 2 + Theme.iconSize
width: parent.width - Theme.iconSize - parent.gap * 3
anchors.verticalCenter: parent.verticalCenter
text: root.deviceName
font.pixelSize: Theme.fontSizeMedium
font.weight: Font.Medium
color: Theme.surfaceText
elide: Text.ElideRight
}
}
}