diff options
| author | 2 * r + 2 * t <61896496+soramanew@users.noreply.github.com> | 2025-07-31 21:29:59 +1000 |
|---|---|---|
| committer | 2 * r + 2 * t <61896496+soramanew@users.noreply.github.com> | 2025-07-31 21:29:59 +1000 |
| commit | 7ef94120dfa7944dd948535b56526cc62ed79333 (patch) | |
| tree | 0e18ba212a4e7012a6929494a594c307b7ba93bf | |
| parent | config: respect user locale for twelve hour clock & temperature (#290) (diff) | |
| download | caelestia-shell-7ef94120dfa7944dd948535b56526cc62ed79333.tar.gz caelestia-shell-7ef94120dfa7944dd948535b56526cc62ed79333.tar.bz2 caelestia-shell-7ef94120dfa7944dd948535b56526cc62ed79333.zip | |
dashboard: better play button
| -rw-r--r-- | modules/dashboard/Media.qml | 90 |
1 files changed, 63 insertions, 27 deletions
diff --git a/modules/dashboard/Media.qml b/modules/dashboard/Media.qml index ba0c8f3..ef856b0 100644 --- a/modules/dashboard/Media.qml +++ b/modules/dashboard/Media.qml @@ -40,10 +40,8 @@ Item { implicitHeight: Math.max(cover.implicitHeight + Config.dashboard.sizes.mediaVisualiserSize * 2, details.implicitHeight, bongocat.implicitHeight) + Appearance.padding.large * 2 Behavior on playerProgress { - NumberAnimation { + Anim { duration: Appearance.anim.durations.large - easing.type: Easing.BezierSpline - easing.bezierCurve: Appearance.anim.curves.standard } } @@ -191,7 +189,7 @@ Item { spacing: Appearance.spacing.small - Control { + PlayerControl { icon: "skip_previous" canUse: Players.active?.canGoPrevious ?? false @@ -200,17 +198,59 @@ Item { } } - Control { - icon: Players.active?.isPlaying ? "pause" : "play_arrow" - canUse: Players.active?.canTogglePlaying ?? false - primary: true + StyledRect { + id: playBtn + property int fontSize: Appearance.font.size.extraLarge + property int padding + property bool fill: true + property bool primary function onClicked(): void { - Players.active?.togglePlaying(); + } + + implicitWidth: Math.max(playIcon.implicitWidth, playIcon.implicitHeight) + padding * 2 + implicitHeight: implicitWidth + + radius: Players.active?.isPlaying ? Appearance.rounding.small : implicitHeight / 2 + color: { + if (!Players.active?.canTogglePlaying) + return Qt.alpha(Colours.palette.m3onSurface, 0.1); + return Players.active?.isPlaying ? Colours.palette.m3primary : Colours.palette.m3primaryContainer; + } + + StateLayer { + disabled: !Players.active?.canTogglePlaying + color: Players.active?.isPlaying ? Colours.palette.m3onPrimary : Colours.palette.m3onPrimaryContainer + + function onClicked(): void { + Players.active?.togglePlaying(); + } + } + + MaterialIcon { + id: playIcon + + anchors.centerIn: parent + anchors.horizontalCenterOffset: -font.pointSize * 0.02 + anchors.verticalCenterOffset: font.pointSize * 0.02 + + animate: true + fill: 1 + text: Players.active?.isPlaying ? "pause" : "play_arrow" + color: { + if (!Players.active?.canTogglePlaying) + return Qt.alpha(Colours.palette.m3onSurface, 0.38); + return Players.active?.isPlaying ? Colours.palette.m3onPrimary : Colours.palette.m3onPrimaryContainer; + } + font.pointSize: Appearance.font.size.extraLarge + } + + Behavior on radius { + Anim {} } } - Control { + PlayerControl { icon: "skip_next" canUse: Players.active?.canGoNext ?? false @@ -313,7 +353,7 @@ Item { Layout.alignment: Qt.AlignHCenter spacing: Appearance.spacing.small - Control { + PlayerControl { icon: "flip_to_front" canUse: Players.active?.canRaise ?? false fontSize: Appearance.font.size.larger @@ -350,11 +390,7 @@ Item { spread: 0 Behavior on opacity { - NumberAnimation { - duration: Appearance.anim.durations.normal - easing.type: Easing.BezierSpline - easing.bezierCurve: Appearance.anim.curves.standard - } + Anim {} } } @@ -485,9 +521,7 @@ Item { } Behavior on implicitHeight { - NumberAnimation { - duration: Appearance.anim.durations.normal - easing.type: Easing.BezierSpline + Anim { easing.bezierCurve: Appearance.anim.curves.emphasized } } @@ -495,7 +529,7 @@ Item { } } - Control { + PlayerControl { icon: "delete" canUse: Players.active?.canQuit ?? false fontSize: Appearance.font.size.larger @@ -555,7 +589,7 @@ Item { } } - component Control: StyledRect { + component PlayerControl: StyledRect { id: control required property string icon @@ -563,20 +597,16 @@ Item { property int fontSize: Appearance.font.size.extraLarge property int padding property bool fill: true - property bool primary function onClicked(): void { } implicitWidth: Math.max(icon.implicitWidth, icon.implicitHeight) + padding * 2 implicitHeight: implicitWidth - radius: Appearance.rounding.full - color: primary && canUse ? Colours.palette.m3primary : "transparent" StateLayer { disabled: !control.canUse - radius: parent.radius - color: control.primary ? Colours.palette.m3onPrimary : Colours.palette.m3onSurface + color: Colours.palette.m3onSurface function onClicked(): void { control.onClicked(); @@ -593,8 +623,14 @@ Item { animate: true fill: control.fill ? 1 : 0 text: control.icon - color: control.canUse ? control.primary ? Colours.palette.m3onPrimary : Colours.palette.m3onSurface : Colours.palette.m3outline + color: control.canUse ? Colours.palette.m3onSurface : Colours.palette.m3outline font.pointSize: control.fontSize } } + + component Anim: NumberAnimation { + duration: Appearance.anim.durations.normal + easing.type: Easing.BezierSpline + easing.bezierCurve: Appearance.anim.curves.standard + } } |