summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--modules/drawers/Backgrounds.qml24
-rw-r--r--modules/drawers/Drawers.qml38
-rw-r--r--modules/drawers/Panels.qml25
-rw-r--r--modules/osd/Background.qml105
-rw-r--r--modules/osd/Wrapper.qml56
-rw-r--r--services/Drawers.qml17
-rw-r--r--shell.qml2
7 files changed, 176 insertions, 91 deletions
diff --git a/modules/drawers/Backgrounds.qml b/modules/drawers/Backgrounds.qml
new file mode 100644
index 0000000..70fd48f
--- /dev/null
+++ b/modules/drawers/Backgrounds.qml
@@ -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
+ }
+}
diff --git a/modules/drawers/Drawers.qml b/modules/drawers/Drawers.qml
index 7d1d3e3..d8f242b 100644
--- a/modules/drawers/Drawers.qml
+++ b/modules/drawers/Drawers.qml
@@ -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 {
diff --git a/modules/drawers/Panels.qml b/modules/drawers/Panels.qml
new file mode 100644
index 0000000..fd56f1b
--- /dev/null
+++ b/modules/drawers/Panels.qml
@@ -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
+ }
+}
diff --git a/modules/osd/Background.qml b/modules/osd/Background.qml
index 4b4b92e..75940d3 100644
--- a/modules/osd/Background.qml
+++ b/modules/osd/Background.qml
@@ -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
-
- 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
- }
+ 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
+ }
- 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
}
}
}
diff --git a/modules/osd/Wrapper.qml b/modules/osd/Wrapper.qml
index 6c21c1a..e56fa2b 100644
--- a/modules/osd/Wrapper.qml
+++ b/modules/osd/Wrapper.qml
@@ -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)
+ }
}
diff --git a/services/Drawers.qml b/services/Drawers.qml
index 6155d5d..7e7d97a 100644
--- a/services/Drawers.qml
+++ b/services/Drawers.qml
@@ -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
+ }
+ }
}
diff --git a/shell.qml b/shell.qml
index f6a83d2..50af7fe 100644
--- a/shell.qml
+++ b/shell.qml
@@ -10,7 +10,7 @@ import Quickshell
ShellRoot {
Bar {}
Launcher {}
- Osd {}
+ //Osd {}
Background {}
Drawers {}
Notifications {}