Warning, /multimedia/audiotube/src/contents/ui/AlbumCoverItem.qml is written in an unsupported language. File is not indexed.

0001 // SPDX-FileCopyrightText: 2023 Jonah BrĂ¼chert <jbb@kaidan.im>
0002 // SPDX-FileCopyrightText: 2023 Mathis BrĂ¼chert <mbb@kaidan.im>
0003 //
0004 // SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
0005 
0006 import QtQuick 2.15
0007 import QtQuick.Controls 2.15 as Controls
0008 import QtQuick.Layouts 1.15
0009 
0010 import org.kde.kirigami 2.15 as Kirigami
0011 
0012 Item {
0013     id: root
0014     property alias contentItem: content.children
0015     property alias title: favTitle.text
0016     property alias subtitle: favSubtitle.text
0017     property bool showIcon: true
0018 
0019     signal clicked
0020     signal optionsClicked
0021 
0022     implicitWidth: mainLayout.implicitWidth
0023     implicitHeight: mainLayout.implicitHeight
0024 
0025     MouseArea {
0026         id: coverArea
0027         acceptedButtons: Qt.LeftButton | Qt.RightButton
0028         anchors.fill: parent
0029         onClicked: (mouse) => {
0030            if (mouse.button === Qt.RightButton) {
0031                 root.optionsClicked()
0032             } else if (mouse.button === Qt.LeftButton) {
0033                 root.clicked()
0034             }
0035         }
0036 
0037         hoverEnabled: !Kirigami.Settings.hasTransientTouchInput
0038         onEntered: {
0039             if (!Kirigami.Settings.hasTransientTouchInput) {
0040                 selection.visible = true
0041                 favTitle.color = Kirigami.Theme.hoverColor
0042                 favSubtitle.color = Kirigami.Theme.hoverColor
0043                 favTitle.font.bold = true
0044                 playAnimationPosition.running = true
0045                 playAnimationOpacity.running = true
0046             }
0047         }
0048 
0049         onExited: {
0050             selection.visible = false
0051             favTitle.color = Kirigami.Theme.textColor
0052             favSubtitle.color = Kirigami.Theme.disabledTextColor
0053             favTitle.font.bold = false
0054         }
0055     }
0056 
0057     ColumnLayout {
0058         id: mainLayout
0059 
0060         anchors.fill: parent
0061         Kirigami.ShadowedRectangle {
0062             id: cover
0063 
0064             color: Kirigami.Theme.backgroundColor
0065             Layout.margins: 5
0066             width: 200
0067             height: 200
0068             radius: 10
0069             shadow.size: 15
0070             shadow.xOffset: 5
0071             shadow.yOffset: 5
0072             shadow.color: Qt.rgba(0, 0, 0, 0.2)
0073 
0074             Item {
0075                 id: content
0076                 anchors.fill: parent
0077             }
0078 
0079             Rectangle {
0080                 id: selection
0081 
0082                 Rectangle {
0083                     anchors.fill: parent
0084                     color: Kirigami.Theme.hoverColor
0085                     radius: 10
0086                     opacity: 0.2
0087                 }
0088                 Item {
0089                     visible: root.showIcon
0090 
0091                     height: parent.height
0092                     width: parent.width
0093                     NumberAnimation on opacity {
0094                         id: playAnimationOpacity
0095                         easing.type: Easing.OutCubic
0096                         running: false
0097                         from: 0
0098                         to: 1
0099                     }
0100                     NumberAnimation on y {
0101                         id: playAnimationPosition
0102                         easing.type: Easing.OutCubic
0103                         running: false
0104                         from: 20
0105                         to: 0
0106                         duration: 100
0107                     }
0108                     Rectangle {
0109                         height: 45
0110                         width: 45
0111                         radius: 50
0112                         color: Kirigami.Theme.hoverColor
0113                         opacity: 0.8
0114                         anchors.centerIn: parent
0115                     }
0116                     Kirigami.Icon {
0117                         x: 100 - 0.43 * height
0118                         y: 100 - 0.5 * height
0119                         color: "white"
0120                         source: "media-playback-start"
0121                     }
0122                 }
0123                 visible: false
0124                 anchors.fill: parent
0125 
0126                 radius: 9
0127 
0128                 border.color: Kirigami.Theme.hoverColor
0129                 border.width: 2
0130                 color: "transparent"
0131             }
0132         }
0133 
0134         RowLayout {
0135             Layout.maximumWidth: 210
0136             ColumnLayout {
0137                 Layout.fillWidth: true
0138                 Controls.Label {
0139                     id: favTitle
0140                     Layout.fillWidth: true
0141                     leftPadding: 5
0142                     elide: Text.ElideRight
0143                     enabled: false
0144                 }
0145                 Controls.Label {
0146                     id: favSubtitle
0147                     Layout.fillWidth: true
0148                     leftPadding: 5
0149                     color: Kirigami.Theme.disabledTextColor
0150                     elide: Text.ElideRight
0151                     enabled: false
0152 
0153                 }
0154             }
0155             Controls.ToolButton {
0156                 Layout.fillHeight: true
0157                 icon.name: "overflow-menu"
0158                 onPressed: root.optionsClicked()
0159             }
0160         }
0161     }
0162 }
0163