mirror of
https://github.com/kossLAN/dots.git
synced 2025-11-04 22:49:50 -05:00
174 lines
4.7 KiB
QML
174 lines
4.7 KiB
QML
import QtQuick
|
|
import Quickshell.Widgets
|
|
import Quickshell.Services.Mpris
|
|
import Qt5Compat.GraphicalEffects
|
|
import "../.."
|
|
|
|
Item {
|
|
id: root
|
|
required property var bar
|
|
|
|
width: statusInfo.width + 125
|
|
height: parent.height
|
|
visible: Mpris.players.values.length != 0
|
|
|
|
Player {
|
|
id: mediaPlayer
|
|
anchor.window: bar
|
|
anchor.rect.x: parentWindow.width / 2 - width / 2
|
|
anchor.rect.y: parentWindow.height
|
|
}
|
|
|
|
MouseArea {
|
|
id: playButton
|
|
hoverEnabled: true
|
|
acceptedButtons: Qt.LeftButton | Qt.RightButton
|
|
onClicked: mouse => {
|
|
if (mouse.button === Qt.LeftButton) {
|
|
if (mediaPlayer.visible) {
|
|
mediaPlayer.hide();
|
|
} else {
|
|
mediaPlayer.show();
|
|
}
|
|
} else {
|
|
if (!Media.trackedPlayer.canPlay || Media.trackedPlayer == null)
|
|
return;
|
|
|
|
if (Media.trackedPlayer.isPlaying)
|
|
Media.trackedPlayer.pause();
|
|
else
|
|
Media.trackedPlayer.play();
|
|
}
|
|
}
|
|
|
|
anchors.fill: parent
|
|
}
|
|
|
|
ShaderEffect {
|
|
id: gradientShader
|
|
property color topLeftColor: Media?.colors[0] ?? "white"
|
|
property color topRightColor: Media?.colors[1] ?? "black"
|
|
property color bottomLeftColor: Media?.colors[2] ?? "white"
|
|
property color bottomRightColor: Media?.colors[3] ?? "black"
|
|
anchors.fill: parent
|
|
visible: false
|
|
fragmentShader: "root:/shaders/vertexgradient.frag.qsb"
|
|
vertexShader: "root:/shaders/vertexgradient.vert.qsb"
|
|
|
|
Behavior on topLeftColor {
|
|
ColorAnimation {
|
|
duration: 500
|
|
easing.type: Easing.InOutQuad
|
|
}
|
|
}
|
|
Behavior on topRightColor {
|
|
ColorAnimation {
|
|
duration: 500
|
|
easing.type: Easing.InOutQuad
|
|
}
|
|
}
|
|
Behavior on bottomLeftColor {
|
|
ColorAnimation {
|
|
duration: 500
|
|
easing.type: Easing.InOutQuad
|
|
}
|
|
}
|
|
Behavior on bottomRightColor {
|
|
ColorAnimation {
|
|
duration: 500
|
|
easing.type: Easing.InOutQuad
|
|
}
|
|
}
|
|
}
|
|
|
|
Rectangle {
|
|
id: artRect
|
|
anchors.fill: gradientShader
|
|
antialiasing: true
|
|
visible: false
|
|
gradient: Gradient {
|
|
orientation: Gradient.Horizontal
|
|
GradientStop {
|
|
position: 0.0
|
|
color: "transparent"
|
|
}
|
|
GradientStop {
|
|
position: 0.5
|
|
color: "white"
|
|
}
|
|
GradientStop {
|
|
position: 1.0
|
|
color: "transparent"
|
|
}
|
|
}
|
|
}
|
|
|
|
OpacityMask {
|
|
id: clip
|
|
source: gradientShader
|
|
anchors.fill: gradientShader
|
|
maskSource: artRect
|
|
cached: false
|
|
visible: false
|
|
}
|
|
|
|
GaussianBlur {
|
|
id: blur
|
|
visible: root.visible
|
|
source: clip
|
|
anchors.fill: clip
|
|
radius: 16
|
|
samples: radius * 2
|
|
transparentBorder: true
|
|
}
|
|
|
|
Item {
|
|
id: statusInfo
|
|
width: statusIcon.width + statusIcon.anchors.rightMargin + nowPlayingText.width
|
|
height: parent.height
|
|
visible: Media.trackedPlayer != null
|
|
|
|
anchors {
|
|
horizontalCenter: parent.horizontalCenter
|
|
verticalCenter: parent.verticalCenter
|
|
top: parent.top
|
|
bottom: parent.botton
|
|
margins: 3.5
|
|
}
|
|
|
|
//Rectangle {
|
|
// color: ShellGlobals.colors.accent
|
|
// radius: 3
|
|
// width: parent.width + 25
|
|
// height: parent.height - 7
|
|
// visible: playButton.containsMouse
|
|
// anchors.centerIn: parent
|
|
//}
|
|
|
|
IconImage {
|
|
id: statusIcon
|
|
implicitSize: 13
|
|
source: Media.trackedPlayer?.isPlaying ? "root:resources/mpris/pause.svg" : "root:resources/mpris/play.svg"
|
|
|
|
anchors {
|
|
verticalCenter: parent.verticalCenter
|
|
right: nowPlayingText.left
|
|
rightMargin: 10
|
|
}
|
|
}
|
|
|
|
Text {
|
|
id: nowPlayingText
|
|
color: ShellGlobals.colors.text
|
|
text: `${Media.trackedPlayer?.trackArtist} - ${Media.trackedPlayer?.trackTitle}`
|
|
font.pointSize: 11
|
|
width: Math.min(implicitWidth, 250)
|
|
elide: Text.ElideRight
|
|
|
|
anchors {
|
|
verticalCenter: parent.verticalCenter
|
|
right: parent.right
|
|
}
|
|
}
|
|
}
|
|
}
|