diff options
Diffstat (limited to 'modules')
| -rw-r--r-- | modules/bar/Bar.qml | 16 | ||||
| -rw-r--r-- | modules/launcher/Launcher.qml | 182 |
2 files changed, 189 insertions, 9 deletions
diff --git a/modules/bar/Bar.qml b/modules/bar/Bar.qml index c739b2a..37d2617 100644 --- a/modules/bar/Bar.qml +++ b/modules/bar/Bar.qml @@ -64,17 +64,15 @@ Variants { active: false opacity: 0 - states: [ - State { - name: "visible" - when: BarConfig.preset.name === loader.presetName + states: State { + name: "visible" + when: BarConfig.preset.name === loader.presetName - PropertyChanges { - loader.opacity: 1 - loader.active: true - } + PropertyChanges { + loader.opacity: 1 + loader.active: true } - ] + } transitions: [ Transition { diff --git a/modules/launcher/Launcher.qml b/modules/launcher/Launcher.qml new file mode 100644 index 0000000..8313721 --- /dev/null +++ b/modules/launcher/Launcher.qml @@ -0,0 +1,182 @@ +import "root:/widgets" +import "root:/config" +import Quickshell +import QtQuick +import QtQuick.Shapes +import Qt5Compat.GraphicalEffects + +Scope { + id: root + + property bool bindInterrupted + property bool launcherVisible + + LazyLoader { + id: loader + + loading: true + + StyledWindow { + id: win + + name: "launcher" + + width: content.width + bg.rounding * 2 + height: content.implicitHeight + + anchors.bottom: true + + Shape { + id: bg + + readonly property int rounding: Appearance.rounding.large + readonly property int roundingY: Math.min(rounding, wrapper.height / 2) + readonly property real wrapperHeight: wrapper.height - 1 // Pixel issues :sob: + + anchors.left: parent.left + anchors.right: parent.right + anchors.bottom: parent.bottom + + preferredRendererType: Shape.CurveRenderer + opacity: Appearance.transparency.enabled ? Appearance.transparency.base : 1 + + ShapePath { + strokeWidth: -1 + fillColor: Appearance.colours.m3surface + + startY: bg.wrapperHeight + + PathArc { + relativeX: bg.rounding + relativeY: -bg.roundingY + radiusX: bg.rounding + radiusY: bg.roundingY + direction: PathArc.Counterclockwise + } + PathLine { + relativeX: 0 + y: bg.roundingY + } + PathArc { + relativeX: bg.rounding + relativeY: -bg.roundingY + radiusX: bg.rounding + radiusY: bg.roundingY + } + PathLine { + x: wrapper.width - bg.rounding * 2 + } + PathArc { + relativeX: bg.rounding + relativeY: bg.roundingY + radiusX: bg.rounding + radiusY: bg.roundingY + } + PathLine { + relativeX: 0 + y: bg.wrapperHeight - bg.roundingY + } + PathArc { + relativeX: bg.rounding + relativeY: bg.roundingY + radiusX: bg.rounding + radiusY: bg.roundingY + direction: PathArc.Counterclockwise + } + } + } + + Item { + id: wrapper + + anchors.left: parent.left + anchors.right: parent.right + anchors.bottom: parent.bottom + + height: 0 + visible: false + + clip: true + + states: State { + name: "visible" + when: root.launcherVisible + + PropertyChanges { + wrapper.height: content.height + wrapper.visible: true + } + } + + transitions: [ + Transition { + from: "" + to: "visible" + + SequentialAnimation { + PropertyAction { + target: wrapper + property: "visible" + } + NumberAnimation { + target: wrapper + property: "height" + duration: Appearance.anim.durations.large + easing.type: Easing.BezierSpline + easing.bezierCurve: Appearance.anim.curves.emphasizedDecel + } + } + }, + Transition { + from: "visible" + to: "" + + SequentialAnimation { + NumberAnimation { + target: wrapper + property: "height" + duration: Appearance.anim.durations.extraLarge + easing.type: Easing.BezierSpline + easing.bezierCurve: Appearance.anim.curves.emphasizedDecel + } + PropertyAction { + target: wrapper + property: "visible" + } + } + } + ] + + PaddedRect { + id: content + + width: LauncherConfig.sizes.width + padding: Appearance.padding.large + anchors.horizontalCenter: parent.horizontalCenter + + StyledText { + text: "Launcher" + font.pointSize: 80 + } + } + } + } + } + + CustomShortcut { + name: "launcher" + description: "Toggle launcher" + onPressed: root.bindInterrupted = false + onReleased: { + if (!root.bindInterrupted) + root.launcherVisible = !root.launcherVisible; + root.bindInterrupted = false; + } + } + + CustomShortcut { + name: "launcherInterrupt" + description: "Interrupt launcher keybind" + onPressed: root.bindInterrupted = true + } +} |