diff options
| -rw-r--r-- | modules/drawers/Backgrounds.qml | 24 | ||||
| -rw-r--r-- | modules/drawers/Drawers.qml | 38 | ||||
| -rw-r--r-- | modules/drawers/Panels.qml | 25 | ||||
| -rw-r--r-- | modules/osd/Background.qml | 105 | ||||
| -rw-r--r-- | modules/osd/Wrapper.qml | 56 | ||||
| -rw-r--r-- | services/Drawers.qml | 17 | ||||
| -rw-r--r-- | shell.qml | 2 |
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 + } + } } @@ -10,7 +10,7 @@ import Quickshell ShellRoot { Bar {} Launcher {} - Osd {} + //Osd {} Background {} Drawers {} Notifications {} |