mpris stuff

This commit is contained in:
kossLAN 2025-06-15 22:52:00 -04:00
parent 233e12e094
commit f0673a66a2
Signed by: kossLAN
SSH key fingerprint: SHA256:bdV0x+wdQHGJ6LgmstH3KV8OpWY+OOFmJcPcB0wQPV8
10 changed files with 192 additions and 104 deletions

View file

@ -1,11 +1,11 @@
import QtQuick
import QtQuick.Layouts
import Quickshell
import Quickshell.Widgets
import "battery"
import "control" as Control
import "systray" as SysTray
import "notifications" as Notifications
import "popups" as Popup
import "mpris" as Mpris
import "../widgets" as Widgets
import ".."
@ -27,83 +27,94 @@ PanelWindow {
bar: root
}
// Left
RowLayout {
spacing: 10
spacing: 0
anchors {
top: parent.top
left: parent.left
bottom: parent.bottom
leftMargin: 4
fill: parent
leftMargin: 5
rightMargin: 5
}
HyprWorkspaces {
screen: root.screen
Layout.fillWidth: false
Layout.preferredHeight: parent.height
Layout.leftMargin: 4
// Left side of bar
Item {
Layout.fillWidth: true
Layout.fillHeight: true
RowLayout {
spacing: 10
anchors.fill: parent
HyprWorkspaces {
screen: root.screen
Layout.fillHeight: true
Layout.leftMargin: 4
}
Widgets.Separator {
visible: activeWindow.visible
Layout.leftMargin: 5
Layout.rightMargin: 5
}
ActiveWindow {
id: activeWindow
Layout.preferredWidth: 400
}
Item {
Layout.fillWidth: true
Layout.fillHeight: true
}
}
}
Widgets.Separator {
visible: activeWindow.visible
Layout.leftMargin: 5
Layout.rightMargin: 5
// Center of bar
WrapperItem {
topMargin: 2
bottomMargin: 2
Layout.fillHeight: true
Mpris.Button {
bar: root
}
}
ActiveWindow {
id: activeWindow
Layout.preferredWidth: 400
}
}
// Right side of bar
Item {
Layout.fillWidth: true
Layout.fillHeight: true
// Right
RowLayout {
spacing: 10
RowLayout {
anchors.fill: parent
anchors {
top: parent.top
bottom: parent.bottom
right: parent.right
rightMargin: 4
}
Item {
Layout.fillWidth: true
Layout.fillHeight: true
}
SysTray.SysTray {
id: sysTray
popup: root.popup
}
SysTray.SysTray {
id: sysTray
popup: root.popup
Layout.fillHeight: true
}
// Notifications.NotificationButton {
// implicitSize: 16
// bar: root
// }
BatteryIndicator {
id: batteryIndicator
popup: root.popup
Layout.fillHeight: true
}
// Text {
// text: "home"
// color: "white"
// font.family: "Material Symbols Rounded"
// renderType: Text.NativeRendering
// textFormat: Text.PlainText
// font.pointSize: 14
//
// font.variableAxes: {
// "FILL": 0
// }
// }
Widgets.Separator {
Layout.leftMargin: 5
Layout.rightMargin: 5
}
BatteryIndicator {
id: batteryIndicator
popup: root.popup
}
Widgets.Separator {
Layout.leftMargin: 5
Layout.rightMargin: 5
}
Clock {
id: clock
color: ShellSettings.colors["inverse_surface"]
Clock {
id: clock
color: ShellSettings.colors["inverse_surface"]
}
}
}
}
}

10
bar/Controller.qml Normal file
View file

@ -0,0 +1,10 @@
import Quickshell
Variants {
model: Quickshell.screens
Bar {
required property var modelData
screen: modelData
}
}

View file

@ -8,15 +8,15 @@ RowLayout {
spacing: 6
visible: Hyprland.monitors.values.length != 0
required property var screen
required property var screen
Repeater {
id: workspaceButtons
model: ScriptModel {
values: Hyprland.workspaces.values.slice().filter(
workspace => workspace.monitor === Hyprland.monitorFor(screen)
).sort((a,b) => {
return a.id - b.id;
});
)
}
Rectangle {
@ -26,7 +26,7 @@ RowLayout {
Layout.alignment: Qt.AlignVCenter
Layout.preferredHeight: 12
Layout.preferredWidth: {
if (Hyprland.focusedMonitor.activeWorkspace.id == modelData.id)
if (Hyprland.focusedMonitor?.activeWorkspace?.id === modelData?.id)
return 25;
return 12;
@ -40,7 +40,7 @@ RowLayout {
if (workspaceButton.containsMouse) {
value = ShellSettings.colors["on_primary"];
} else if (Hyprland.focusedMonitor.activeWorkspace.id == modelData.id) {
} else if (Hyprland.focusedMonitor.activeWorkspace.id === modelData.id) {
value = ShellSettings.colors["primary"];
}
@ -55,6 +55,13 @@ RowLayout {
}
}
Behavior on color {
ColorAnimation {
duration: 100
easing.type: Easing.OutQuad
}
}
MouseArea {
id: workspaceButton
anchors.fill: parent

View file

@ -10,8 +10,7 @@ import "../.."
Item {
id: root
implicitWidth: parent.height + 8
implicitHeight: parent.height
implicitWidth: height + 8 // for margin
visible: UPower.displayDevice.isLaptopBattery
required property var popup

63
bar/mpris/Button.qml Normal file
View file

@ -0,0 +1,63 @@
import Quickshell.Widgets
import QtQuick
import "../../mpris" as Mpris
import "../.."
WrapperRectangle {
id: root
color: button.containsMouse ? ShellSettings.colors["primary"] : "transparent"
radius: 6
leftMargin: 5
rightMargin: 5
required property var bar
property var player: Mpris.Controller.trackedPlayer
Text {
id: mediaInfo
text: root.player?.trackTitle ?? ""
color: button.containsMouse ? ShellSettings.colors["inverse_primary"] : ShellSettings.colors["inverse_surface"]
elide: Text.ElideRight
horizontalAlignment: Text.AlignHCenter
verticalAlignment: Text.AlignVCenter
font.pointSize: 11
anchors.verticalCenter: parent.verticalCenter
MouseArea {
id: button
anchors.fill: parent
hoverEnabled: true
onClicked: {
popup.visible = !popup.visible;
}
}
WidgetWindow {
id: popup
visible: false
parentWindow: root.bar
// anchor.window: root.bar
}
// Item {
// id: menu
// visible: false
// implicitWidth: 250
// implicitHeight: 80
// }
Behavior on color {
ColorAnimation {
duration: 100
}
}
}
Behavior on color {
ColorAnimation {
duration: 100
}
}
}

View file

@ -0,0 +1,9 @@
import Quickshell
PopupWindow {
id: root
color: "red"
implicitWidth: 500
implicitHeight: 500
}

View file

@ -30,7 +30,6 @@ PopupWindow {
property var content
function set(item, content) {
// isOpen = false;
root.item = item;
root.content = content;
popupContent.data = content;

View file

@ -11,7 +11,6 @@ RowLayout {
id: root
spacing: 10
visible: SystemTray.items.values.length > 0
implicitHeight: parent.height
required property var popup
@ -20,8 +19,8 @@ RowLayout {
delegate: Item {
id: trayField
implicitHeight: parent.height
implicitWidth: trayContainer.width
Layout.preferredWidth: parent.height
Layout.fillHeight: true
required property SystemTrayItem modelData
MouseArea {
@ -79,14 +78,20 @@ RowLayout {
id: trayContainer
color: trayButton.containsMouse ? ShellSettings.colors["primary"] : "transparent"
radius: width / 2
implicitHeight: parent.height - 2
implicitWidth: parent.height - 2
anchors.centerIn: parent
implicitHeight: parent.height
implicitWidth: parent.height
anchors {
fill: parent
margins: 1
}
IconImage {
id: trayIcon
source: {
// console.log(trayField.modelData.id);
switch (trayField.modelData.id) {
case "obs":
return "image://icon/obs-tray";