diff --git a/components/StyledMenu.qml b/components/StyledMenu.qml index 24815b6..12830d7 100644 --- a/components/StyledMenu.qml +++ b/components/StyledMenu.qml @@ -1,4 +1,5 @@ import qs.config +import qs.services import QtQuick import QtQuick.Controls @@ -10,6 +11,11 @@ Menu { focus: true closePolicy: Popup.CloseOnEscape | Popup.CloseOnPressOutsideParent + popupType: Popup.Window + + function toggle() { + visible ? close() : open(); + } enter: Transition { NumberAnimation { diff --git a/modules/Shell.qml b/modules/Shell.qml index 41e7643..9971716 100644 --- a/modules/Shell.qml +++ b/modules/Shell.qml @@ -4,8 +4,9 @@ import "launcher" import "pomodoro" import "powermenu" import "storybook" -import Quickshell import QtQuick +import Quickshell +import Quickshell.Wayland Variants { model: Quickshell.screens @@ -15,7 +16,65 @@ Variants { required property ShellScreen modelData - Bar {} + PanelWindow { + id: exclusionZone + + anchors.top: true + anchors.left: true + anchors.right: true + + implicitWidth: bar.width + implicitHeight: bar.height + + color: "transparent" + } + + PanelWindow { + id: topWindow + + anchors.top: true + anchors.left: true + anchors.right: true + anchors.bottom: true + + color: 'transparent' + + WlrLayershell.exclusionMode: ExclusionMode.Ignore + WlrLayershell.layer: WlrLayer.Top + + mask: Region { + width: topWindow.width + height: topWindow.height + intersection: Intersection.Xor + regions: regions.instances + } + + Variants { + id: regions + + model: panels.children + + Region { + required property Item modelData + + x: modelData.x + y: modelData.y + width: modelData.width + height: modelData.height + intersection: Intersection.Subtract + } + } + + Item { + id: panels + + anchors.fill: parent + + Bar { + id: bar + } + } + } Launcher {} Pomodoro {} PowerMenu {} diff --git a/modules/bar/Bar.qml b/modules/bar/Bar.qml index c39e847..231600b 100644 --- a/modules/bar/Bar.qml +++ b/modules/bar/Bar.qml @@ -3,55 +3,29 @@ import "components/bluetooth" import "components/hyprland" import "components/notifications" import "components/tray" +import qs.components import qs.config import QtQuick import QtQuick.Layouts -import Quickshell -import Quickshell.Wayland -PanelWindow { - id: parentWindow +StyledWrapperRectangle { + id: root - anchors.top: true - anchors.left: true - anchors.right: true + anchors.left: parent.left + anchors.right: parent.right + anchors.top: parent.top + anchors.leftMargin: Dimensions.bar.horizontalMargins + anchors.rightMargin: Dimensions.bar.horizontalMargins + anchors.topMargin: Dimensions.bar.verticalMargins + anchors.bottomMargin: Dimensions.bar.verticalMargins - implicitHeight: Dimensions.bar.height - color: 'transparent' + margin: 6 - WlrLayershell.layer: WlrLayer.Top - - Item { - - anchors.fill: parent - anchors.leftMargin: Dimensions.bar.horizontalMargins - anchors.rightMargin: Dimensions.bar.horizontalMargins - anchors.topMargin: Dimensions.bar.verticalMargins - anchors.bottomMargin: Dimensions.bar.verticalMargins - - Rectangle { - id: background - anchors.fill: parent - color: Theme.palette.base300 - radius: Dimensions.radius - - border { - color: Theme.palette.base100 - width: Dimensions.bar.border - pixelAligned: true - } - } + RowLayout { RowLayout { id: leftbar - anchors.left: parent.left - anchors.verticalCenter: parent.verticalCenter - - anchors.leftMargin: Dimensions.bar.horizontalPadding - anchors.topMargin: Dimensions.bar.verticalPadding - anchors.bottomMargin: Dimensions.bar.verticalPadding - spacing: Dimensions.bar.spacing SystemLogo { @@ -66,11 +40,7 @@ PanelWindow { RowLayout { id: centerbar - anchors.horizontalCenter: parent.horizontalCenter - anchors.verticalCenter: parent.verticalCenter - - anchors.topMargin: Dimensions.bar.verticalPadding - anchors.bottomMargin: Dimensions.bar.verticalPadding + Layout.alignment: Qt.AlignHCenter spacing: Dimensions.bar.spacing @@ -80,12 +50,7 @@ PanelWindow { RowLayout { id: rightbar - anchors.right: parent.right - anchors.verticalCenter: parent.verticalCenter - - anchors.rightMargin: Dimensions.bar.horizontalPadding - anchors.topMargin: Dimensions.bar.verticalPadding - anchors.bottomMargin: Dimensions.bar.verticalPadding + Layout.alignment: Qt.AlignRight spacing: Dimensions.bar.spacing diff --git a/modules/pomodoro/Pomodoro.qml b/modules/pomodoro/Pomodoro.qml index 9d970d8..9dba513 100644 --- a/modules/pomodoro/Pomodoro.qml +++ b/modules/pomodoro/Pomodoro.qml @@ -55,10 +55,10 @@ StyledWindow { id: circle radius: 150 borderColor: Theme.palette.base100 - strokeColor: Pomodoro.state == "timer" ? Theme.palette.primary : Theme.palette.warning + strokeColor: PomodoroService.state == "timer" ? Theme.palette.primary : Theme.palette.warning strokeWidth: 12 fillColor: button.hovered ? Theme.palette.primary : "transparent" - percentage: (Pomodoro.state == "timer" ? (Pomodoro.initialTime - Pomodoro.remainingTime) : Pomodoro.remainingTime) / Pomodoro.initialTime % 1 + percentage: (PomodoroService.state == "timer" ? (PomodoroService.initialTime - PomodoroService.remainingTime) : PomodoroService.remainingTime) / PomodoroService.initialTime % 1 } StyledIconButton { @@ -69,17 +69,17 @@ StyledWindow { radius: 9999 focus: root.visible - text: Pomodoro.running ? Icons.square : Icons.play + text: PomodoroService.running ? Icons.square : Icons.play font.pixelSize: 48 background: undefined onClicked: { - Pomodoro.toggle(); + PomodoroService.toggle(); } Keys.onSpacePressed: event => { event.accepted = true; - Pomodoro.toggle(); + PomodoroService.toggle(); } Keys.onEscapePressed: event => { event.accepted = true; @@ -87,7 +87,7 @@ StyledWindow { } Keys.onTabPressed: event => { event.accepted = true; - Pomodoro.reset(); + PomodoroService.reset(); } } } @@ -95,7 +95,7 @@ StyledWindow { StyledText { Layout.alignment: Qt.AlignHCenter text: { - const date = new Date(Pomodoro.remainingTime); + const date = new Date(PomodoroService.remainingTime); return `${date.getMinutes().toString().padStart(2, "0")}:${(date.getSeconds() % 3600).toString().padStart(2, "0")}`; } font.pixelSize: 16 @@ -108,7 +108,7 @@ StyledWindow { text: "Reset" onClicked: { - Pomodoro.reset(); + PomodoroService.reset(); } } } diff --git a/services/Pomodoro.qml b/services/PomodoroService.qml similarity index 100% rename from services/Pomodoro.qml rename to services/PomodoroService.qml