Compare commits

..

No commits in common. "a69507980bec64fe5e6504ab8a21706e852c64bc" and "85a1260a35def5c220f371e67707807eb9cfb3b2" have entirely different histories.

5 changed files with 16 additions and 41 deletions

View file

@ -1,5 +1,4 @@
import QtQuick import QtQuick
import Quickshell
import Quickshell.Io import Quickshell.Io
import "." as M import "." as M
@ -12,7 +11,7 @@ M.BarSection {
property int percent: 0 property int percent: 0
onPercentChanged: if (percent > 0) onPercentChanged: if (percent > 0)
M.OsdState.show(percent / 100, "\uF185", root.mapToGlobal(root.width / 2, 0).x - (QsWindow.window?.screen?.x ?? 0), QsWindow.window?.screen ?? null) M.OsdState.show(percent / 100, "\uF185")
Process { Process {
id: adjProc id: adjProc

View file

@ -9,35 +9,23 @@ M.PopupPanel {
required property MprisPlayer player required property MprisPlayer player
// Album art // Album art placeholder (or real art if available)
Item {
width: menuWindow.panelWidth
height: _artImg.status === Image.Ready ? 140 : 60
clip: true
Rectangle { Rectangle {
anchors.fill: parent width: menuWindow.panelWidth
height: 80
color: M.Theme.base02 color: M.Theme.base02
} radius: M.Theme.radius
Image { Image {
id: _artImg
anchors.fill: parent anchors.fill: parent
source: menuWindow.player?.trackArtUrl ?? "" source: menuWindow.player?.trackArtUrl ?? ""
fillMode: Image.PreserveAspectCrop fillMode: Image.PreserveAspectCrop
visible: status === Image.Ready visible: status === Image.Ready
}
// Gradient fade at the bottom so art blends into the panel // Round top corners to match panel
Rectangle { layer.enabled: true
anchors.left: parent.left layer.effect: Item {
anchors.right: parent.right // simple clip the panel background behind handles the rounding
anchors.bottom: parent.bottom
height: 40
visible: _artImg.visible
gradient: Gradient {
GradientStop { position: 0; color: "transparent" }
GradientStop { position: 1; color: M.Theme.base01 }
} }
} }
@ -48,7 +36,7 @@ M.PopupPanel {
color: M.Theme.base04 color: M.Theme.base04
font.pixelSize: 28 font.pixelSize: 28
font.family: M.Theme.iconFontFamily font.family: M.Theme.iconFontFamily
visible: _artImg.status !== Image.Ready visible: !menuWindow.player?.trackArtUrl
} }
} }

View file

@ -13,7 +13,7 @@ PanelWindow {
color: "transparent" color: "transparent"
property bool _winVisible: false property bool _winVisible: false
property bool _shown: M.OsdState.visible && M.OsdState.screen === root.screen property bool _shown: M.OsdState.visible
on_ShownChanged: { on_ShownChanged: {
if (_shown) { if (_shown) {
@ -35,10 +35,7 @@ PanelWindow {
anchors.left: true anchors.left: true
margins.top: 0 margins.top: 0
margins.left: Math.max(0, Math.min( margins.left: Math.round((screen.width - implicitWidth) / 2)
Math.round(M.OsdState.itemX - implicitWidth / 2),
screen.width - implicitWidth
))
implicitWidth: 200 implicitWidth: 200
implicitHeight: 48 implicitHeight: 48

View file

@ -5,19 +5,15 @@ QtObject {
property bool visible: false property bool visible: false
property real value: 0 // 0.01.0 property real value: 0 // 0.01.0
property string icon: "" property string icon: ""
property real itemX: 0
property var screen: null
property Timer _timer: Timer { property Timer _timer: Timer {
interval: 1500 interval: 1500
onTriggered: visible = false onTriggered: visible = false
} }
function show(val, ico, x, scr) { function show(val, ico) {
value = val; value = val;
icon = ico; icon = ico;
itemX = x;
screen = scr;
visible = true; visible = true;
_timer.restart(); _timer.restart();
} }

View file

@ -1,5 +1,4 @@
import QtQuick import QtQuick
import Quickshell
import Quickshell.Services.Pipewire import Quickshell.Services.Pipewire
import "." as M import "." as M
@ -16,12 +15,8 @@ M.BarSection {
readonly property real volume: sink?.audio?.volume ?? 0 readonly property real volume: sink?.audio?.volume ?? 0
readonly property bool muted: sink?.audio?.muted ?? false readonly property bool muted: sink?.audio?.muted ?? false
function _showOsd() { onVolumeChanged: M.OsdState.show(volume, root.muted ? "\uF026" : (volume > 0.5 ? "\uF028" : "\uF027"))
const ico = root.muted ? "\uF026" : (volume > 0.5 ? "\uF028" : "\uF027"); onMutedChanged: M.OsdState.show(volume, root.muted ? "\uF026" : (volume > 0.5 ? "\uF028" : "\uF027"))
M.OsdState.show(volume, ico, root.mapToGlobal(root.width / 2, 0).x - (QsWindow.window?.screen?.x ?? 0), QsWindow.window?.screen ?? null);
}
onVolumeChanged: _showOsd()
onMutedChanged: _showOsd()
M.BarIcon { M.BarIcon {
icon: root.muted ? "\uF026" : (root.volume > 0.5 ? "\uF028" : (root.volume > 0 ? "\uF027" : "\uF026")) icon: root.muted ? "\uF026" : (root.volume > 0.5 ? "\uF028" : (root.volume > 0 ? "\uF027" : "\uF026"))