93 lines
2.4 KiB
QML
93 lines
2.4 KiB
QML
import QtQuick
|
|
import QtQuick.Layouts
|
|
import Quickshell
|
|
import Quickshell.Services.Mpris
|
|
import Quickshell.Io
|
|
import qs.common
|
|
import qs
|
|
import Quickshell.Wayland
|
|
|
|
Scope {
|
|
id: root
|
|
property bool visible: false
|
|
readonly property MprisPlayer acivePlayer: MprisController.activePlayer()
|
|
readonly property real osdWidth: Appearance.sizes.osdWidth
|
|
readonly property real widgetWidth: Appearance.sizes.mediaControlsWidth
|
|
readonly property real widgetHeight: Appearance.sizes.mediaControlsHeight
|
|
property real contentPadding: 13
|
|
property real popupRounding: Appearance.rounding.screenRounding - Appearance.sizes.elevationMargin + 1
|
|
property real artRounding: Appearance.rounding.verysmall
|
|
|
|
|
|
Loader {
|
|
id: mediaControlsLoader
|
|
active: GlobalStates.mediaControlsOpen
|
|
onActiveChanged: {
|
|
if (mediaControlsLoader.active & !MprisController.hasPlayers) {
|
|
GlobalStates.mediaControlsOpen = false;
|
|
}
|
|
}
|
|
|
|
sourceComponent: PanelWindow {
|
|
id: mediaControlsRoot
|
|
visible: true
|
|
|
|
exclusionMode: ExclusionMode.Ignore
|
|
exclusiveZone: 0
|
|
margins {
|
|
top: Appearance.sizes.barHeight
|
|
bottom: Appearance.sizes.barHeight
|
|
//left: (mediaControlsRoot.screen.width / 2) - (osdWidth / 2) - widgetWidth
|
|
}
|
|
implicitWidth: root.widgetWidth
|
|
implicitHeight: playerColumnLayout.implicitHeight
|
|
color: "transparent"
|
|
WlrLayershell.namespace: "quickshell:mediaControls"
|
|
|
|
anchors {
|
|
top: !Config.options.bar.bottom
|
|
bottom: Config.options.bar.bottom
|
|
//left: true
|
|
}
|
|
|
|
mask: Region {
|
|
item: playerColumnLayout
|
|
}
|
|
|
|
ColumnLayout {
|
|
id: playerColumnLayout
|
|
anchors.fill: parent
|
|
spacing: -Appearance.sizes.elevationMargin
|
|
|
|
Repeater {
|
|
model: ScriptModel {
|
|
values: MprisController.meaningfulPlayers
|
|
}
|
|
delegate: PlayerControl {
|
|
required property MprisPlayer modelData
|
|
contentPadding: root.contentPadding
|
|
popupRounding: root.popupRounding
|
|
artRounding: root.artRounding
|
|
player: modelData
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
IpcHandler {
|
|
target: "mediaControls"
|
|
|
|
function toggle(): void {
|
|
mediaControlsLoader.active = !mediaControlsLoader.active;
|
|
}
|
|
|
|
function close(): void {
|
|
mediaControls.loader.active = false;
|
|
}
|
|
|
|
function open(): void {
|
|
mediaControlsLoader.active = true;
|
|
}
|
|
}
|
|
} |