Compare commits
No commits in common. "a69507980bec64fe5e6504ab8a21706e852c64bc" and "85a1260a35def5c220f371e67707807eb9cfb3b2" have entirely different histories.
a69507980b
...
85a1260a35
5 changed files with 16 additions and 41 deletions
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -5,19 +5,15 @@ QtObject {
|
||||||
property bool visible: false
|
property bool visible: false
|
||||||
property real value: 0 // 0.0–1.0
|
property real value: 0 // 0.0–1.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();
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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"))
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue