refactor: move to single window

This commit is contained in:
2 * r + 2 * t 2025-05-13 16:30:53 +10:00
parent c64e602725
commit ad7c6ea98e
7 changed files with 176 additions and 91 deletions

View file

@ -0,0 +1,24 @@
import "root:/services"
import "root:/config"
import "root:/modules/osd" as Osd
import Quickshell
import QtQuick
import QtQuick.Shapes
Shape {
id: root
required property Panels panels
anchors.fill: parent
anchors.margins: BorderConfig.thickness
preferredRendererType: Shape.CurveRenderer
opacity: Colours.transparency.enabled ? Colours.transparency.base : 1
Osd.Background {
wrapper: panels.osd
startX: root.width
startY: (root.height - panels.osd.height) / 2
}
}

View file

@ -1,6 +1,10 @@
pragma ComponentBehavior: Bound
import "root:/widgets"
import "root:/services"
import "root:/config"
import Quickshell
import QtQuick
Variants {
model: Quickshell.screens
@ -27,6 +31,13 @@ Variants {
width: scope.modelData.width - BorderConfig.thickness * 2
height: scope.modelData.height - BorderConfig.thickness * 2
intersection: Intersection.Xor
regions: panels.children.map(c => regionComp.createObject(this, {
x: c.x,
y: c.y,
width: c.width,
height: c.height
}))
}
anchors.top: true
@ -34,14 +45,35 @@ Variants {
anchors.left: true
anchors.right: true
Border {
id: border
Component {
id: regionComp
Region {
intersection: Intersection.Subtract
}
}
Item {
id: background
anchors.fill: parent
visible: false
Border {}
Backgrounds {
panels: panels
}
}
LayerShadow {
source: border
source: background
}
Panels {
id: panels
screen: scope.modelData
}
Interactions {

View file

@ -0,0 +1,25 @@
import "root:/widgets"
import "root:/services"
import "root:/config"
import "root:/modules/osd" as Osd
import Quickshell
import QtQuick
Item {
id: root
required property ShellScreen screen
readonly property Osd.Wrapper osd: osd
anchors.fill: parent
anchors.margins: BorderConfig.thickness
Osd.Wrapper {
id: osd
screen: root.screen
anchors.verticalCenter: parent.verticalCenter
anchors.right: parent.right
}
}

View file

@ -3,68 +3,61 @@ import "root:/config"
import QtQuick
import QtQuick.Shapes
Shape {
ShapePath {
id: root
required property real wrapperWidth
required property real wrapperHeight
required property Wrapper wrapper
readonly property real rounding: BorderConfig.rounding
readonly property bool flatten: wrapperWidth < rounding * 2
readonly property real roundingX: flatten ? wrapperWidth / 2 : rounding
readonly property bool flatten: wrapper.width < rounding * 2
readonly property real roundingX: flatten ? wrapper.width / 2 : rounding
preferredRendererType: Shape.CurveRenderer
opacity: Colours.transparency.enabled ? Colours.transparency.base : 1
strokeWidth: -1
fillColor: BorderConfig.colour
ShapePath {
strokeWidth: -1
fillColor: BorderConfig.colour
PathArc {
relativeX: -root.roundingX
relativeY: root.rounding
radiusX: Math.min(root.rounding, root.wrapper.width)
radiusY: root.rounding
}
PathLine {
relativeX: -(root.wrapper.width - root.roundingX * 2)
relativeY: 0
}
PathArc {
relativeX: -root.roundingX
relativeY: root.rounding
radiusX: Math.min(root.rounding, root.wrapper.width)
radiusY: root.rounding
direction: PathArc.Counterclockwise
}
PathLine {
relativeX: 0
relativeY: root.wrapper.height - root.rounding * 4
}
PathArc {
relativeX: root.roundingX
relativeY: root.rounding
radiusX: Math.min(root.rounding, root.wrapper.width)
radiusY: root.rounding
direction: PathArc.Counterclockwise
}
PathLine {
relativeX: root.wrapper.width - root.roundingX * 2
relativeY: 0
}
PathArc {
relativeX: root.roundingX
relativeY: root.rounding
radiusX: Math.min(root.rounding, root.wrapper.width)
radiusY: root.rounding
}
startX: root.wrapperWidth - 1
PathArc {
relativeX: -root.roundingX
relativeY: root.rounding
radiusX: Math.min(root.rounding, root.wrapperWidth)
radiusY: root.rounding
}
PathLine {
x: root.roundingX
relativeY: 0
}
PathArc {
relativeX: -root.roundingX
relativeY: root.rounding
radiusX: Math.min(root.rounding, root.wrapperWidth)
radiusY: root.rounding
direction: PathArc.Counterclockwise
}
PathLine {
y: root.wrapperHeight - root.rounding * 2
}
PathArc {
relativeX: root.roundingX
relativeY: root.rounding
radiusX: Math.min(root.rounding, root.wrapperWidth)
radiusY: root.rounding
direction: PathArc.Counterclockwise
}
PathLine {
x: (root.flatten ? root.roundingX : root.wrapperWidth - root.rounding) - 1
relativeY: 0
}
PathArc {
relativeX: root.roundingX
relativeY: root.rounding
radiusX: Math.min(root.rounding, root.wrapperWidth)
radiusY: root.rounding
}
Behavior on fillColor {
ColorAnimation {
duration: Appearance.anim.durations.normal
easing.type: Easing.BezierSpline
easing.bezierCurve: Appearance.anim.curves.standard
}
Behavior on fillColor {
ColorAnimation {
duration: Appearance.anim.durations.normal
easing.type: Easing.BezierSpline
easing.bezierCurve: Appearance.anim.curves.standard
}
}
}

View file

@ -1,23 +1,23 @@
import "root:/services"
import "root:/config"
import Quickshell
import QtQuick
Item {
id: root
required property bool osdVisible
required property real contentWidth
property bool shouldBeVisible
required property ShellScreen screen
visible: width > 0
width: 0
implicitWidth: 0
implicitHeight: content.height + BorderConfig.rounding * 2
states: State {
name: "visible"
when: root.osdVisible
when: Drawers.visibilities[root.screen].osd
PropertyChanges {
root.width: contentWidth
root.shouldBeVisible: true
root.implicitWidth: content.width
}
}
@ -26,37 +26,31 @@ Item {
from: ""
to: "visible"
SequentialAnimation {
PropertyAction {
target: root
property: "shouldBeVisible"
}
NumberAnimation {
target: root
property: "width"
duration: Appearance.anim.durations.large
easing.type: Easing.BezierSpline
easing.bezierCurve: Appearance.anim.curves.emphasizedDecel
}
NumberAnimation {
target: root
property: "implicitWidth"
duration: Appearance.anim.durations.large
easing.type: Easing.BezierSpline
easing.bezierCurve: Appearance.anim.curves.emphasizedDecel
}
},
Transition {
from: "visible"
to: ""
SequentialAnimation {
NumberAnimation {
target: root
property: "width"
duration: Appearance.anim.durations.normal
easing.type: Easing.BezierSpline
easing.bezierCurve: Appearance.anim.curves.emphasizedAccel
}
PropertyAction {
target: root
property: "shouldBeVisible"
}
NumberAnimation {
target: root
property: "implicitWidth"
duration: Appearance.anim.durations.normal
easing.type: Easing.BezierSpline
easing.bezierCurve: Appearance.anim.curves.emphasizedAccel
}
}
]
Content {
id: content
monitor: Brightness.getMonitorForScreen(root.screen)
}
}

View file

@ -1,10 +1,16 @@
pragma Singleton
import Quickshell
import QtQuick
Singleton {
id: root
property var visibilities: Quickshell.screens.reduce((acc, s) => {
acc[s] = visibleComp.createObject(root);
return acc;
}, {})
property var positions: ({})
property int rightExclusion
@ -14,4 +20,15 @@ Singleton {
positions[screen] = Qt.point(x, y);
posChanged(screen, x, y);
}
Component {
id: visibleComp
QtObject {
property bool launcher
property bool osd
property bool notifs
property bool session
}
}
}

View file

@ -10,7 +10,7 @@ import Quickshell
ShellRoot {
Bar {}
Launcher {}
Osd {}
//Osd {}
Background {}
Drawers {}
Notifications {}