summaryrefslogtreecommitdiff
path: root/modules/sidebar
diff options
context:
space:
mode:
author2 * r + 2 * t <61896496+soramanew@users.noreply.github.com>2025-09-18 15:19:15 +1000
committer2 * r + 2 * t <61896496+soramanew@users.noreply.github.com>2025-09-18 15:19:15 +1000
commit85d575f6c18017693cb2f3ab07314a0cf43adbe6 (patch)
tree89540859a71162c28c8419af49c75cc3634e6b70 /modules/sidebar
parentlauncher: fix open anim (diff)
downloadcaelestia-shell-85d575f6c18017693cb2f3ab07314a0cf43adbe6.tar.gz
caelestia-shell-85d575f6c18017693cb2f3ab07314a0cf43adbe6.tar.bz2
caelestia-shell-85d575f6c18017693cb2f3ab07314a0cf43adbe6.zip
feat: add sidebar
WIP
Diffstat (limited to 'modules/sidebar')
-rw-r--r--modules/sidebar/Background.qml52
-rw-r--r--modules/sidebar/Content.qml19
-rw-r--r--modules/sidebar/Wrapper.qml66
3 files changed, 137 insertions, 0 deletions
diff --git a/modules/sidebar/Background.qml b/modules/sidebar/Background.qml
new file mode 100644
index 0000000..beefdf5
--- /dev/null
+++ b/modules/sidebar/Background.qml
@@ -0,0 +1,52 @@
+import qs.components
+import qs.services
+import qs.config
+import QtQuick
+import QtQuick.Shapes
+
+ShapePath {
+ id: root
+
+ required property Wrapper wrapper
+ required property var panels
+
+ readonly property real rounding: Config.border.rounding
+
+ readonly property real notifsWidthDiff: panels.notifications.width - wrapper.width
+ readonly property real notifsRoundingX: panels.notifications.height > 0 && notifsWidthDiff < rounding * 2 ? notifsWidthDiff / 2 : rounding
+
+ readonly property real utilsWidthDiff: panels.utilities.width - wrapper.width
+ readonly property real utilsRoundingX: utilsWidthDiff < rounding * 2 ? utilsWidthDiff / 2 : rounding
+
+ strokeWidth: -1
+ fillColor: Colours.palette.m3surface
+
+ PathLine {
+ relativeX: -root.wrapper.width - root.notifsRoundingX
+ relativeY: 0
+ }
+ PathArc {
+ relativeX: root.notifsRoundingX
+ relativeY: root.rounding
+ radiusX: root.notifsRoundingX
+ radiusY: root.rounding
+ }
+ PathLine {
+ relativeX: 0
+ relativeY: root.wrapper.height - root.rounding * 2
+ }
+ PathArc {
+ relativeX: -root.utilsRoundingX
+ relativeY: root.rounding
+ radiusX: root.utilsRoundingX
+ radiusY: root.rounding
+ }
+ PathLine {
+ relativeX: root.wrapper.width + root.utilsRoundingX
+ relativeY: 0
+ }
+
+ Behavior on fillColor {
+ CAnim {}
+ }
+}
diff --git a/modules/sidebar/Content.qml b/modules/sidebar/Content.qml
new file mode 100644
index 0000000..13829bd
--- /dev/null
+++ b/modules/sidebar/Content.qml
@@ -0,0 +1,19 @@
+import qs.config
+import QtQuick
+import QtQuick.Layouts
+
+Item {
+ id: root
+
+ required property var visibilities
+
+ implicitWidth: layout.implicitWidth
+ implicitHeight: layout.implicitHeight
+
+ ColumnLayout {
+ id: layout
+
+ anchors.fill: parent
+ spacing: Appearance.spacing.normal
+ }
+}
diff --git a/modules/sidebar/Wrapper.qml b/modules/sidebar/Wrapper.qml
new file mode 100644
index 0000000..ddbb39c
--- /dev/null
+++ b/modules/sidebar/Wrapper.qml
@@ -0,0 +1,66 @@
+pragma ComponentBehavior: Bound
+
+import qs.components
+import qs.config
+import QtQuick
+
+Item {
+ id: root
+
+ required property var visibilities
+ required property var panels
+
+ visible: width > 0
+ implicitWidth: 0
+ implicitHeight: 0
+
+ states: State {
+ name: "visible"
+ when: root.visibilities.sidebar && Config.sidebar.enabled
+
+ PropertyChanges {
+ root.implicitWidth: Config.sidebar.sizes.width
+ }
+ }
+
+ transitions: [
+ Transition {
+ from: ""
+ to: "visible"
+
+ Anim {
+ target: root
+ property: "implicitWidth"
+ duration: Appearance.anim.durations.expressiveDefaultSpatial
+ easing.bezierCurve: Appearance.anim.curves.expressiveDefaultSpatial
+ }
+ },
+ Transition {
+ from: "visible"
+ to: ""
+
+ Anim {
+ target: root
+ property: "implicitWidth"
+ easing.bezierCurve: root.panels.osd.width > 0 || root.panels.session.width > 0 ? Appearance.anim.curves.expressiveDefaultSpatial : Appearance.anim.curves.emphasized
+ }
+ }
+ ]
+
+ Loader {
+ id: content
+
+ anchors.top: parent.top
+ anchors.left: parent.left
+ anchors.right: parent.right
+ anchors.margins: Appearance.padding.large
+
+ visible: false
+ active: true
+ Component.onCompleted: active = Qt.binding(() => (root.visibilities.sidebar && Config.sidebar.enabled) || root.visible)
+
+ sourceComponent: Content {
+ visibilities: root.visibilities
+ }
+ }
+}