pragma ComponentBehavior: Bound import QtQuick import Quickshell import qs.components import qs.services import qs.config Item { id: root required property ShellScreen screen required property DrawerVisibilities visibilities property bool hovered readonly property Brightness.Monitor monitor: Brightness.getMonitorForScreen(root.screen) readonly property bool shouldBeActive: visibilities.osd && Config.osd.enabled && !(visibilities.utilities && Config.utilities.enabled) property real volume property bool muted property real sourceVolume property bool sourceMuted property real brightness function show(): void { visibilities.osd = true; timer.restart(); } Component.onCompleted: { volume = Audio.volume; muted = Audio.muted; sourceVolume = Audio.sourceVolume; sourceMuted = Audio.sourceMuted; brightness = root.monitor?.brightness ?? 0; } visible: anchors.rightMargin > -implicitWidth anchors.rightMargin: -implicitWidth implicitWidth: content.implicitWidth implicitHeight: content.implicitHeight states: State { name: "visible" when: root.shouldBeActive PropertyChanges { root.anchors.rightMargin: 0 } } transitions: [ Transition { // from: "" // to: "visible" Anim { target: root.anchors property: "rightMargin" easing.bezierCurve: Appearance.anim.curves.expressiveDefaultSpatial } } // Transition { // from: "visible" // to: "" // Anim { // target: root // property: "implicitWidth" // easing.bezierCurve: Appearance.anim.curves.emphasized // } // } ] Connections { function onMutedChanged(): void { root.show(); root.muted = Audio.muted; } function onVolumeChanged(): void { root.show(); root.volume = Audio.volume; } function onSourceMutedChanged(): void { root.show(); root.sourceMuted = Audio.sourceMuted; } function onSourceVolumeChanged(): void { root.show(); root.sourceVolume = Audio.sourceVolume; } target: Audio } Connections { function onBrightnessChanged(): void { root.show(); root.brightness = root.monitor?.brightness ?? 0; } target: root.monitor } Timer { id: timer interval: Config.osd.hideDelay onTriggered: { if (!root.hovered) root.visibilities.osd = false; } } Loader { id: content anchors.verticalCenter: parent.verticalCenter anchors.left: parent.left Component.onCompleted: active = Qt.binding(() => root.shouldBeActive || root.visible) sourceComponent: Content { monitor: root.monitor visibilities: root.visibilities volume: root.volume muted: root.muted sourceVolume: root.sourceVolume sourceMuted: root.sourceMuted brightness: root.brightness } } }