mirror of
https://github.com/AvengeMedia/DankMaterialShell.git
synced 2026-01-26 14:32:52 -05:00
80
quickshell/Modules/OSD/AudioOutputOSD.qml
Normal file
80
quickshell/Modules/OSD/AudioOutputOSD.qml
Normal file
@@ -0,0 +1,80 @@
|
||||
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
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -141,6 +141,13 @@ Item {
|
||||
checked: SettingsData.osdPowerProfileEnabled
|
||||
onToggled: checked => SettingsData.set("osdPowerProfileEnabled", checked)
|
||||
}
|
||||
|
||||
SettingsToggleRow {
|
||||
text: I18n.tr("Audio Output Switch")
|
||||
description: I18n.tr("Show on-screen display when cycling audio output devices")
|
||||
checked: SettingsData.osdAudioOutputEnabled
|
||||
onToggled: checked => SettingsData.set("osdAudioOutputEnabled", checked)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user