Compare commits

..

4 commits

Author SHA1 Message Date
Benjamin Palko
75f780753f bar margin 2025-09-04 17:26:10 -04:00
Benjamin Palko
37dfd1255a use window popup type to allow menu outside of parent window 2025-09-04 17:26:10 -04:00
Benjamin Palko
a40f7666dc rename pomodoro service 2025-09-04 17:25:04 -04:00
Benjamin Palko
4011f4b5c8 move bar to unified window setup 2025-09-04 17:25:04 -04:00
5 changed files with 89 additions and 59 deletions

View file

@ -1,4 +1,5 @@
import qs.config import qs.config
import qs.services
import QtQuick import QtQuick
import QtQuick.Controls import QtQuick.Controls
@ -10,6 +11,11 @@ Menu {
focus: true focus: true
closePolicy: Popup.CloseOnEscape | Popup.CloseOnPressOutsideParent closePolicy: Popup.CloseOnEscape | Popup.CloseOnPressOutsideParent
popupType: Popup.Window
function toggle() {
visible ? close() : open();
}
enter: Transition { enter: Transition {
NumberAnimation { NumberAnimation {

View file

@ -4,8 +4,9 @@ import "launcher"
import "pomodoro" import "pomodoro"
import "powermenu" import "powermenu"
import "storybook" import "storybook"
import Quickshell
import QtQuick import QtQuick
import Quickshell
import Quickshell.Wayland
Variants { Variants {
model: Quickshell.screens model: Quickshell.screens
@ -15,7 +16,65 @@ Variants {
required property ShellScreen modelData 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 {} Launcher {}
Pomodoro {} Pomodoro {}
PowerMenu {} PowerMenu {}

View file

@ -3,55 +3,29 @@ import "components/bluetooth"
import "components/hyprland" import "components/hyprland"
import "components/notifications" import "components/notifications"
import "components/tray" import "components/tray"
import qs.components
import qs.config import qs.config
import QtQuick import QtQuick
import QtQuick.Layouts import QtQuick.Layouts
import Quickshell
import Quickshell.Wayland
PanelWindow { StyledWrapperRectangle {
id: parentWindow id: root
anchors.top: true anchors.left: parent.left
anchors.left: true anchors.right: parent.right
anchors.right: true anchors.top: parent.top
implicitHeight: Dimensions.bar.height
color: 'transparent'
WlrLayershell.layer: WlrLayer.Top
Item {
anchors.fill: parent
anchors.leftMargin: Dimensions.bar.horizontalMargins anchors.leftMargin: Dimensions.bar.horizontalMargins
anchors.rightMargin: Dimensions.bar.horizontalMargins anchors.rightMargin: Dimensions.bar.horizontalMargins
anchors.topMargin: Dimensions.bar.verticalMargins anchors.topMargin: Dimensions.bar.verticalMargins
anchors.bottomMargin: Dimensions.bar.verticalMargins anchors.bottomMargin: Dimensions.bar.verticalMargins
Rectangle { margin: 6
id: background
anchors.fill: parent
color: Theme.palette.base300
radius: Dimensions.radius
border { RowLayout {
color: Theme.palette.base100
width: Dimensions.bar.border
pixelAligned: true
}
}
RowLayout { RowLayout {
id: leftbar 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 spacing: Dimensions.bar.spacing
SystemLogo { SystemLogo {
@ -66,11 +40,7 @@ PanelWindow {
RowLayout { RowLayout {
id: centerbar id: centerbar
anchors.horizontalCenter: parent.horizontalCenter Layout.alignment: Qt.AlignHCenter
anchors.verticalCenter: parent.verticalCenter
anchors.topMargin: Dimensions.bar.verticalPadding
anchors.bottomMargin: Dimensions.bar.verticalPadding
spacing: Dimensions.bar.spacing spacing: Dimensions.bar.spacing
@ -80,12 +50,7 @@ PanelWindow {
RowLayout { RowLayout {
id: rightbar id: rightbar
anchors.right: parent.right Layout.alignment: Qt.AlignRight
anchors.verticalCenter: parent.verticalCenter
anchors.rightMargin: Dimensions.bar.horizontalPadding
anchors.topMargin: Dimensions.bar.verticalPadding
anchors.bottomMargin: Dimensions.bar.verticalPadding
spacing: Dimensions.bar.spacing spacing: Dimensions.bar.spacing

View file

@ -55,10 +55,10 @@ StyledWindow {
id: circle id: circle
radius: 150 radius: 150
borderColor: Theme.palette.base100 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 strokeWidth: 12
fillColor: button.hovered ? Theme.palette.primary : "transparent" 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 { StyledIconButton {
@ -69,17 +69,17 @@ StyledWindow {
radius: 9999 radius: 9999
focus: root.visible focus: root.visible
text: Pomodoro.running ? Icons.square : Icons.play text: PomodoroService.running ? Icons.square : Icons.play
font.pixelSize: 48 font.pixelSize: 48
background: undefined background: undefined
onClicked: { onClicked: {
Pomodoro.toggle(); PomodoroService.toggle();
} }
Keys.onSpacePressed: event => { Keys.onSpacePressed: event => {
event.accepted = true; event.accepted = true;
Pomodoro.toggle(); PomodoroService.toggle();
} }
Keys.onEscapePressed: event => { Keys.onEscapePressed: event => {
event.accepted = true; event.accepted = true;
@ -87,7 +87,7 @@ StyledWindow {
} }
Keys.onTabPressed: event => { Keys.onTabPressed: event => {
event.accepted = true; event.accepted = true;
Pomodoro.reset(); PomodoroService.reset();
} }
} }
} }
@ -95,7 +95,7 @@ StyledWindow {
StyledText { StyledText {
Layout.alignment: Qt.AlignHCenter Layout.alignment: Qt.AlignHCenter
text: { 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")}`; return `${date.getMinutes().toString().padStart(2, "0")}:${(date.getSeconds() % 3600).toString().padStart(2, "0")}`;
} }
font.pixelSize: 16 font.pixelSize: 16
@ -108,7 +108,7 @@ StyledWindow {
text: "Reset" text: "Reset"
onClicked: { onClicked: {
Pomodoro.reset(); PomodoroService.reset();
} }
} }
} }