From a25d57b6c9cb2a8790626c80ec5fbbdf3b159c3f Mon Sep 17 00:00:00 2001 From: Teo Date: Thu, 2 Jul 2026 21:08:03 +0200 Subject: [PATCH] unfinished workspace redesign --- modules/bar/Bar.qml | 2 +- modules/bar/widgets/MenuButton.qml | 7 +- modules/bar/widgets/Workspaces.qml | 147 +++++++++++++++++------------ 3 files changed, 91 insertions(+), 65 deletions(-) diff --git a/modules/bar/Bar.qml b/modules/bar/Bar.qml index 57a4b77..7422cc6 100644 --- a/modules/bar/Bar.qml +++ b/modules/bar/Bar.qml @@ -35,7 +35,7 @@ PanelWindow { anchors.verticalCenter: parent.verticalCenter anchors.left: parent.left - anchors.leftMargin: 0 + anchors.leftMargin: Config.big_spacing_fun(height) spacing: Config.big_spacing_fun(height) MenuButton {} diff --git a/modules/bar/widgets/MenuButton.qml b/modules/bar/widgets/MenuButton.qml index db129bd..cab35e3 100644 --- a/modules/bar/widgets/MenuButton.qml +++ b/modules/bar/widgets/MenuButton.qml @@ -16,17 +16,16 @@ MouseArea { Rectangle { anchors.fill: parent - color: menuButton.containsMouse ? Colors.secondaryContainer_fg : Qt.alpha(Colors.secondary, 0.75) + color: "transparent" radius: Config.radius_fun(menuButton.height) - border.width: 0 Text { id: menuText - anchors.centerIn: parent + anchors.centerIn: parent text: "󰣇" font.pixelSize: Config.bigIconSize(menuButton.height) font.family: Config.font - color: menuButton.containsMouse ? Colors.secondaryContainer : Colors.secondary_fg + color: Colors.secondaryContainer_fg } } diff --git a/modules/bar/widgets/Workspaces.qml b/modules/bar/widgets/Workspaces.qml index a85d7fb..455fe03 100644 --- a/modules/bar/widgets/Workspaces.qml +++ b/modules/bar/widgets/Workspaces.qml @@ -4,76 +4,102 @@ import Quickshell.Hyprland import "../../../config" import "../states/Apps" -Row { - id: workspacesRow - +Rectangle { + id: workspacesContainer required property HyprlandMonitor thisMonitor - spacing: Config.spacing_fun(bar.height) - Repeater { - model: Hyprland.workspaces - Loader { - active: modelData.monitor === thisMonitor - sourceComponent: Rectangle { - id: wsRect - property var workspaceData: modelData + height: bar.height - (Config.spacing_fun(bar.height) * 1.5) + width: workspacesRow.width + (Config.spacing_fun(bar.height) * 2) + + radius: height / 2 + + color: Colors.surfaceVariant + border.color: Colors.surfaceVariant_fg + border.width: Config.border_width - width: { - var cw = wsNum.width - if (wsIconsRow.children.length > 0) - cw += Config.spacing_fun(bar.height) + wsIconsRow.width - Math.max(cw + Config.spacing_fun(bar.height)*2, wsNum.height + Config.spacing_fun(bar.height)*2) - } - height: wsNum.height + Config.spacing_fun(wsNum.height) - radius: Config.radius_fun(height) - color: wsArea.containsMouse ? Colors.tertiaryContainer - : workspaceData.active ? Colors.primaryContainer - : Colors.secondaryContainer - border.color: wsArea.containsMouse ? Colors.tertiaryContainer_fg - : workspaceData.active ? Colors.primaryContainer_fg - : Colors.secondaryContainer_fg - border.width: Config.border_width + Row { + id: workspacesRow + anchors.centerIn: parent + spacing: Config.spacing_fun(bar.height) / 2 - MouseArea { - id: wsArea - hoverEnabled: true - cursorShape: Qt.PointingHandCursor - anchors.fill: parent - onClicked: { - console.log("[Workspaces] Switch to workspace: " + workspaceData.id) - Hyprland.dispatch("workspace " + workspaceData.id) - Hyprland.dispatch("hl.dsp.focus({ workspace = "+workspaceData.id+" })") + Repeater { + model: Hyprland.workspaces + Loader { + active: modelData.monitor === thisMonitor + sourceComponent: Item { + id: wsItem + property var workspaceData: modelData + + + width: { + var cw = wsNum.width + if (wsIconsRow.children.length > 0) + cw += Config.spacing_fun(bar.height) + wsIconsRow.width + Math.max(cw + Config.spacing_fun(bar.height)*2, wsNum.height + Config.spacing_fun(bar.height)*2) + } + height: workspacesContainer.height + + // highlight + Rectangle { + anchors.centerIn: parent + width: parent.width + height: parent.height - (Config.spacing_fun(bar.height) * 1.5) + + radius: height / 2 + + color: wsArea.containsMouse ? Colors.tertiaryContainer + : workspaceData.active ? Colors.primaryContainer + : "transparent" + + border.color: wsArea.containsMouse ? Colors.tertiaryContainer_fg + : workspaceData.active ? Colors.primaryContainer_fg + : "transparent" + + border.width: (wsArea.containsMouse || workspaceData.active) ? Config.border_width : 0 } - Row { - anchors.centerIn: parent - spacing: Config.spacing_fun(parent.height) - - Text { - id: wsNum - text: workspaceData.id - anchors.verticalCenter: parent.verticalCenter - color: wsArea.containsMouse ? Colors.tertiary - : workspaceData.active ? Colors.primary - : Colors.secondary - font.pixelSize: Config.iconSize(bar.height) - font.family: Config.font - font.bold: true + // hyprland workspace api + color + MouseArea { + id: wsArea + hoverEnabled: true + cursorShape: Qt.PointingHandCursor + anchors.fill: parent + onClicked: { + console.log("[Workspaces] Switch to workspace: " + workspaceData.id) + Hyprland.dispatch("workspace " + workspaceData.id) + Hyprland.dispatch("hl.dsp.focus({ workspace = "+workspaceData.id+" })") } Row { - id: wsIconsRow - spacing: Config.spacing_fun(workspacesRow.height) - anchors.verticalCenter: parent.verticalCenter + anchors.centerIn: parent + spacing: Config.spacing_fun(parent.height) - Repeater { - model: AppsState.iconsForWorkspace(workspaceData.id) - delegate: Text { - text: modelData - color: wsArea.containsMouse ? Colors.tertiary - : Colors.secondary - font.pixelSize: Config.labelSize(bar.height) - font.family: Config.font + Text { + id: wsNum + text: workspaceData.id + anchors.verticalCenter: parent.verticalCenter + color: wsArea.containsMouse ? Colors.tertiary + : workspaceData.active ? Colors.primary + : Colors.secondary + font.pixelSize: Config.iconSize(bar.height) + font.family: Config.font + font.bold: true + } + + Row { + id: wsIconsRow + spacing: Config.spacing_fun(workspacesContainer.height) + anchors.verticalCenter: parent.verticalCenter + + Repeater { + model: AppsState.iconsForWorkspace(workspaceData.id) + delegate: Text { + text: modelData + color: wsArea.containsMouse ? Colors.tertiary + : Colors.secondary + font.pixelSize: Config.labelSize(bar.height) + font.family: Config.font + } } } } @@ -88,5 +114,6 @@ Row { text: "No Workspaces" color: Colors.error font.pixelSize: Config.iconSize(bar.height) + anchors.centerIn: parent } }