shift-shell/components/mobileshell/qml/components/ScreenEdgeDragEffect.qml
Devin Lin a8b858dc3e Remove kirigami version in imports
This fixes potential issues stemming from pinning versions on Kirigami
qml api imports
2026-03-06 22:08:07 -05:00

71 lines
3 KiB
QML

// SPDX-FileCopyrightText: 2024 Micah Stanley <stanleymicah@proton.me>
// SPDX-License-Identifier: GPL-2.0-or-later
import QtQuick 2.4
import QtQuick.Layouts 1.1
import QtQuick.Window 2.15
import QtQuick.Shapes 1.8
import org.kde.kirigami as Kirigami
Item {
id: root
property bool isHorizontal: false
property real length: Kirigami.Units.gridUnit * 10
property real offsetLimit: Kirigami.Units.gridUnit * 2
property real startPoint: 0
property real sidePoint: 0
property real offsetPoint: 0
visible: offsetPoint != 0
Shape {
id: shape
readonly property int flip: root.offsetPoint > 0 ? -1 : 1
readonly property real position: root.startPoint - root.length / 2
readonly property real sp: Math.max(Math.min(root.sidePoint, root.length), -Kirigami.Units.gridUnit * 10)
readonly property real op: Math.max(Math.min(-shape.calculateResistance(-root.offsetPoint, 0), 0), -root.offsetLimit + 3)
transform: [
Translate {
x: root.isHorizontal ? 0 : shape.position
y: root.isHorizontal ? shape.position : 0
}
]
function calculateResistance(value : double, threshold : int) : double {
if (value > threshold) {
return threshold + Math.pow(value - threshold + 1, Math.max(0.8 - (value - threshold) / ((root.isHorizontal ? Screen.width : Screen.height - threshold) * 2), 0.65));
} else {
return value;
}
}
readonly property var shapPath: [
Qt.point(3 * shape.flip, 0),
Qt.point(2 * shape.flip, 0),
Qt.point(0, root.length * 0.2 + shape.sp * 0.16),
Qt.point(shape.op, root.length * 0.5 + shape.sp * 0.35),
Qt.point(0, root.length * 0.8 + shape.sp * 0.16),
Qt.point(2 * shape.flip, root.length),
Qt.point(3 * shape.flip, root.length),
]
ShapePath {
id: shapeVertical
fillColor: "black"
strokeColor: "black"
startX: shape.shapPath[0].x; startY: shape.shapPath[0].y
PathCurve { x: root.isHorizontal ? shape.shapPath[1].x : shape.shapPath[1].y; y: root.isHorizontal ? shape.shapPath[1].y : shape.shapPath[1].x}
PathCurve { x: root.isHorizontal ? shape.shapPath[2].x : shape.shapPath[2].y; y: root.isHorizontal ? shape.shapPath[2].y : shape.shapPath[2].x}
PathCurve { x: root.isHorizontal ? shape.shapPath[3].x : shape.shapPath[3].y; y: root.isHorizontal ? shape.shapPath[3].y : shape.shapPath[3].x}
PathCurve { x: root.isHorizontal ? shape.shapPath[4].x : shape.shapPath[4].y; y: root.isHorizontal ? shape.shapPath[4].y : shape.shapPath[4].x}
PathCurve { x: root.isHorizontal ? shape.shapPath[5].x : shape.shapPath[5].y; y: root.isHorizontal ? shape.shapPath[5].y : shape.shapPath[5].x}
PathCurve { x: root.isHorizontal ? shape.shapPath[6].x : shape.shapPath[6].y; y: root.isHorizontal ? shape.shapPath[6].y : shape.shapPath[6].x}
}
}
}