implement and use clickable on mpris player
This commit is contained in:
parent
622d9fe7a7
commit
903803bdfd
3 changed files with 94 additions and 32 deletions
|
|
@ -1,22 +1,34 @@
|
|||
import Quickshell
|
||||
import Quickshell.Services.Mpris
|
||||
import QtQuick
|
||||
import "../../../../styled/"
|
||||
import "../../../../config/"
|
||||
|
||||
Item {
|
||||
Loader {
|
||||
required property MprisPlayer modelData
|
||||
required property int index
|
||||
|
||||
signal nextPlayer
|
||||
signal previousPlayer
|
||||
|
||||
sourceComponent: player
|
||||
property Component player: Clickable {
|
||||
id: clickable
|
||||
|
||||
implicitWidth: text.width
|
||||
implicitHeight: Dimensions.mpris.height
|
||||
|
||||
StyledLabel {
|
||||
anchors.fill: text
|
||||
onClicked: {
|
||||
if (!modelData.canTogglePlaying) {
|
||||
return;
|
||||
}
|
||||
if (modelData.isPlaying) {
|
||||
modelData.pause();
|
||||
} else {
|
||||
modelData.play();
|
||||
}
|
||||
}
|
||||
onScrolledUp: parent.nextPlayer()
|
||||
onScrolledDown: parent.previousPlayer()
|
||||
|
||||
StyledText {
|
||||
id: text
|
||||
|
|
@ -29,28 +41,25 @@ Item {
|
|||
rightPadding: Dimensions.mpris.horizontalPadding
|
||||
|
||||
font.pixelSize: Dimensions.mpris.fontSize
|
||||
}
|
||||
|
||||
MouseArea {
|
||||
anchors.fill: text
|
||||
|
||||
cursorShape: Qt.PointingHandCursor
|
||||
|
||||
onClicked: {
|
||||
if (!modelData.canTogglePlaying) {
|
||||
return;
|
||||
}
|
||||
if (modelData.isPlaying) {
|
||||
modelData.pause();
|
||||
} else {
|
||||
modelData.play();
|
||||
states: State {
|
||||
name: "hovered"
|
||||
when: clickable.hovered
|
||||
PropertyChanges {
|
||||
text {
|
||||
color: Theme.palette.base300
|
||||
}
|
||||
}
|
||||
onWheel: event => {
|
||||
if (event.angleDelta.y > 0) {
|
||||
parent.nextPlayer();
|
||||
} else if (event.angleDelta.y < 0) {
|
||||
parent.previousPlayer();
|
||||
}
|
||||
transitions: Transition {
|
||||
from: ""
|
||||
to: "hovered"
|
||||
reversible: true
|
||||
ColorAnimation {
|
||||
properties: "color"
|
||||
duration: 200
|
||||
easing.type: Easing.InOutCubic
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
53
styled/Clickable.qml
Normal file
53
styled/Clickable.qml
Normal file
|
|
@ -0,0 +1,53 @@
|
|||
import QtQuick
|
||||
import "../config/"
|
||||
|
||||
Item {
|
||||
id: root
|
||||
property bool disabled: false
|
||||
property alias hovered: mouseArea.containsMouse
|
||||
signal clicked
|
||||
signal scrolledUp
|
||||
signal scrolledDown
|
||||
|
||||
StyledLabel {
|
||||
id: background
|
||||
anchors.fill: parent
|
||||
states: State {
|
||||
name: "hovered"
|
||||
when: mouseArea.containsMouse
|
||||
PropertyChanges {
|
||||
background {
|
||||
color: Theme.palette.primary
|
||||
}
|
||||
}
|
||||
}
|
||||
transitions: Transition {
|
||||
from: ""
|
||||
to: "hovered"
|
||||
reversible: true
|
||||
ColorAnimation {
|
||||
properties: "color"
|
||||
duration: 200
|
||||
easing.type: Easing.InOutCubic
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
MouseArea {
|
||||
id: mouseArea
|
||||
anchors.fill: parent
|
||||
|
||||
hoverEnabled: !disabled
|
||||
cursorShape: Qt.PointingHandCursor
|
||||
|
||||
onClicked: root.clicked()
|
||||
|
||||
onWheel: event => {
|
||||
if (event.angleDelta.y > 0) {
|
||||
root.scrolledUp();
|
||||
} else if (event.angleDelta.y < 0) {
|
||||
root.scrolledDown();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Reference in a new issue