summaryrefslogtreecommitdiff
path: root/raveos-hyprland-theme/theme-data/DankMaterialShell/quickshell/Modules/DankDash/Overview/MediaOverviewCard.qml
diff options
context:
space:
mode:
authorAlexanderCurl <alexc@alexc.hu>2026-04-18 17:46:06 +0100
committerAlexanderCurl <alexc@alexc.hu>2026-04-18 17:46:06 +0100
commit70ca3fef77ee8bdc6e3ac28589a6fa08c024cc69 (patch)
treeab1123d4067c1b086dd6faa7ee4ea643236b565a /raveos-hyprland-theme/theme-data/DankMaterialShell/quickshell/Modules/DankDash/Overview/MediaOverviewCard.qml
parent5d94c0a7d44a2255b81815a52a7056a94a39842d (diff)
downloadRaveOS-PKGBUILD-70ca3fef77ee8bdc6e3ac28589a6fa08c024cc69.tar.gz
RaveOS-PKGBUILD-70ca3fef77ee8bdc6e3ac28589a6fa08c024cc69.zip
Replaced file structures for themes in the correct format
Diffstat (limited to 'raveos-hyprland-theme/theme-data/DankMaterialShell/quickshell/Modules/DankDash/Overview/MediaOverviewCard.qml')
-rw-r--r--raveos-hyprland-theme/theme-data/DankMaterialShell/quickshell/Modules/DankDash/Overview/MediaOverviewCard.qml211
1 files changed, 211 insertions, 0 deletions
diff --git a/raveos-hyprland-theme/theme-data/DankMaterialShell/quickshell/Modules/DankDash/Overview/MediaOverviewCard.qml b/raveos-hyprland-theme/theme-data/DankMaterialShell/quickshell/Modules/DankDash/Overview/MediaOverviewCard.qml
new file mode 100644
index 0000000..35f4f47
--- /dev/null
+++ b/raveos-hyprland-theme/theme-data/DankMaterialShell/quickshell/Modules/DankDash/Overview/MediaOverviewCard.qml
@@ -0,0 +1,211 @@
+import QtQuick
+import QtQuick.Effects
+import QtQuick.Shapes
+import Quickshell.Services.Mpris
+import qs.Common
+import qs.Services
+import qs.Widgets
+
+Card {
+ id: root
+ clip: false
+
+ signal clicked()
+
+ property MprisPlayer activePlayer: MprisController.activePlayer
+ property real currentPosition: activePlayer?.positionSupported ? activePlayer.position : 0
+ property real displayPosition: currentPosition
+
+ readonly property real ratio: {
+ if (!activePlayer || activePlayer.length <= 0) return 0
+ const pos = displayPosition % Math.max(1, activePlayer.length)
+ const calculatedRatio = pos / activePlayer.length
+ return Math.max(0, Math.min(1, calculatedRatio))
+ }
+
+ onActivePlayerChanged: {
+ if (activePlayer?.positionSupported) {
+ currentPosition = Qt.binding(() => activePlayer?.position || 0)
+ } else {
+ currentPosition = 0
+ }
+ }
+
+ Timer {
+ interval: 300
+ running: activePlayer?.playbackState === MprisPlaybackState.Playing && !isSeeking
+ repeat: true
+ onTriggered: activePlayer?.positionSupported && activePlayer.positionChanged()
+ }
+
+ property bool isSeeking: false
+
+ Column {
+ anchors.centerIn: parent
+ spacing: Theme.spacingS
+ visible: !activePlayer
+
+ DankIcon {
+ name: "music_note"
+ size: Theme.iconSize
+ color: Qt.rgba(Theme.surfaceText.r, Theme.surfaceText.g, Theme.surfaceText.b, 0.5)
+ anchors.horizontalCenter: parent.horizontalCenter
+ }
+
+ StyledText {
+ text: I18n.tr("No Media")
+ font.pixelSize: Theme.fontSizeSmall
+ color: Qt.rgba(Theme.surfaceText.r, Theme.surfaceText.g, Theme.surfaceText.b, 0.7)
+ anchors.horizontalCenter: parent.horizontalCenter
+ }
+ }
+
+ Column {
+ anchors.centerIn: parent
+ width: parent.width - Theme.spacingXS * 2
+ spacing: Theme.spacingL
+ visible: activePlayer
+
+ Item {
+ width: 140
+ height: 110
+ anchors.horizontalCenter: parent.horizontalCenter
+ clip: false
+
+ DankAlbumArt {
+ width: 110
+ height: 80
+ anchors.centerIn: parent
+ activePlayer: root.activePlayer
+ albumSize: 76
+ animationScale: 1.05
+ }
+ }
+
+ Column {
+ width: parent.width
+ spacing: Theme.spacingXS
+ topPadding: Theme.spacingL
+
+ StyledText {
+ text: activePlayer?.trackTitle || I18n.tr("Unknown")
+ font.pixelSize: Theme.fontSizeSmall
+ font.weight: Font.Medium
+ color: Theme.surfaceText
+ width: parent.width
+ elide: Text.ElideRight
+ maximumLineCount: 1
+ horizontalAlignment: Text.AlignHCenter
+ }
+
+ StyledText {
+ text: activePlayer?.trackArtist || I18n.tr("Unknown Artist")
+ font.pixelSize: Theme.fontSizeSmall
+ color: Qt.rgba(Theme.surfaceText.r, Theme.surfaceText.g, Theme.surfaceText.b, 0.7)
+ width: parent.width
+ elide: Text.ElideRight
+ maximumLineCount: 1
+ horizontalAlignment: Text.AlignHCenter
+ }
+ }
+
+ DankSeekbar {
+ width: parent.width + 4
+ height: 20
+ x: -2
+ activePlayer: root.activePlayer
+ isSeeking: root.isSeeking
+ onIsSeekingChanged: root.isSeeking = isSeeking
+ }
+
+ Item {
+ width: parent.width
+ height: 32
+
+ Row {
+ spacing: Theme.spacingS
+ anchors.centerIn: parent
+
+ Rectangle {
+ width: 28
+ height: 28
+ radius: 14
+ anchors.verticalCenter: playPauseButton.verticalCenter
+ color: prevArea.containsMouse ? Theme.withAlpha(Theme.surfaceContainerHigh, Theme.popupTransparency) : "transparent"
+
+ DankIcon {
+ anchors.centerIn: parent
+ name: "skip_previous"
+ size: 14
+ color: Theme.surfaceText
+ }
+
+ MouseArea {
+ id: prevArea
+ anchors.fill: parent
+ hoverEnabled: true
+ cursorShape: Qt.PointingHandCursor
+ onClicked: MprisController.previousOrRewind()
+ }
+ }
+
+ Rectangle {
+ id: playPauseButton
+ width: 32
+ height: 32
+ radius: 16
+ color: Theme.primary
+
+ DankIcon {
+ anchors.centerIn: parent
+ name: activePlayer?.playbackState === MprisPlaybackState.Playing ? "pause" : "play_arrow"
+ size: 16
+ color: Theme.background
+ }
+
+ MouseArea {
+ anchors.fill: parent
+ hoverEnabled: true
+ cursorShape: Qt.PointingHandCursor
+ onClicked: activePlayer?.togglePlaying()
+ }
+ }
+
+ Rectangle {
+ width: 28
+ height: 28
+ radius: 14
+ anchors.verticalCenter: playPauseButton.verticalCenter
+ color: nextArea.containsMouse ? Theme.withAlpha(Theme.surfaceContainerHigh, Theme.popupTransparency) : "transparent"
+
+ DankIcon {
+ anchors.centerIn: parent
+ name: "skip_next"
+ size: 14
+ color: Theme.surfaceText
+ }
+
+ MouseArea {
+ id: nextArea
+ anchors.fill: parent
+ hoverEnabled: true
+ cursorShape: Qt.PointingHandCursor
+ onClicked: activePlayer?.next()
+ }
+ }
+ }
+ }
+ }
+
+ MouseArea {
+ anchors.top: parent.top
+ anchors.left: parent.left
+ anchors.right: parent.right
+ anchors.bottom: parent.bottom
+ anchors.bottomMargin: 123
+ hoverEnabled: true
+ cursorShape: Qt.PointingHandCursor
+ onClicked: root.clicked()
+ visible: activePlayer
+ }
+}