diff options
Diffstat (limited to 'modules/bar/Content.qml')
| -rw-r--r-- | modules/bar/Content.qml | 155 |
1 files changed, 155 insertions, 0 deletions
diff --git a/modules/bar/Content.qml b/modules/bar/Content.qml new file mode 100644 index 0000000..adfd35b --- /dev/null +++ b/modules/bar/Content.qml @@ -0,0 +1,155 @@ +import "root:/widgets" +import "root:/services" +import "root:/config" +import "components" +import "components/workspaces" +import Quickshell +import Quickshell.Widgets +import QtQuick + +StyledRect { + id: root + + required property ShellScreen screen + + anchors.top: parent.top + anchors.bottom: parent.bottom + + implicitWidth: child.implicitWidth + BorderConfig.thickness + + color: BorderConfig.colour + + Component.onCompleted: Visibilities.bar = this + + Item { + id: child + + readonly property bool vertical: true + + anchors.top: parent.top + anchors.bottom: parent.bottom + anchors.right: parent.right + + implicitWidth: Math.max(osIcon.implicitWidth, workspaces.implicitWidth, activeWindow.implicitWidth, tray.implicitWidth, clock.implicitWidth, statusIcons.implicitWidth, power.implicitWidth) + + OsIcon { + id: osIcon + + anchors.horizontalCenter: parent.horizontalCenter + anchors.top: parent.top + anchors.topMargin: Appearance.padding.large + } + + ClippingRectangle { + id: workspaces + + anchors.horizontalCenter: parent.horizontalCenter + anchors.top: osIcon.bottom + anchors.topMargin: Appearance.spacing.normal + + radius: Appearance.rounding.full + color: Colours.palette.m3surfaceContainer + + implicitWidth: workspacesInner.implicitWidth + Appearance.spacing.small + implicitHeight: workspacesInner.implicitHeight + Appearance.spacing.small * 2 + + Workspaces { + id: workspacesInner + + anchors.centerIn: parent + + vertical: true + } + + Behavior on color { + ColorAnimation { + duration: Appearance.anim.durations.normal + easing.type: Easing.BezierSpline + easing.bezierCurve: Appearance.anim.curves.standard + } + } + } + + MouseArea { + anchors.top: workspaces.bottom + anchors.bottom: activeWindow.top + anchors.left: parent.left + anchors.right: parent.right + + onWheel: event => { + if (event.angleDelta.y > 0) + Audio.setVolume(Audio.volume + 0.1); + else if (event.angleDelta.y < 0) + Audio.setVolume(Audio.volume - 0.1); + } + } + + ActiveWindow { + id: activeWindow + + anchors.horizontalCenter: parent.horizontalCenter + anchors.top: workspaces.bottom + anchors.bottom: tray.top + anchors.margins: Appearance.spacing.large + } + + MouseArea { + anchors.top: workspaces.bottom + anchors.bottom: activeWindow.top + anchors.left: parent.left + anchors.right: parent.right + + onWheel: event => { + const monitor = Brightness.getMonitorForScreen(root.screen); + if (event.angleDelta.y > 0) + monitor.setBrightness(monitor.brightness + 0.1); + else if (event.angleDelta.y < 0) + monitor.setBrightness(monitor.brightness - 0.1); + } + } + + Tray { + id: tray + + anchors.horizontalCenter: parent.horizontalCenter + anchors.bottom: clock.top + anchors.bottomMargin: Appearance.spacing.larger + } + + Clock { + id: clock + + anchors.horizontalCenter: parent.horizontalCenter + anchors.bottom: statusIcons.top + anchors.bottomMargin: Appearance.spacing.normal + } + + StyledRect { + id: statusIcons + + anchors.left: parent.left + anchors.right: parent.right + anchors.bottom: power.top + anchors.bottomMargin: Appearance.spacing.normal + + radius: Appearance.rounding.full + color: Colours.palette.m3surfaceContainer + + implicitHeight: statusIconsInner.implicitHeight + Appearance.padding.normal * 2 + + StatusIcons { + id: statusIconsInner + + anchors.centerIn: parent + } + } + + Power { + id: power + + anchors.horizontalCenter: parent.horizontalCenter + anchors.bottom: parent.bottom + anchors.bottomMargin: Appearance.padding.large + } + } +} |