mirror of
https://invent.kde.org/marcoa/shift-shell.git
synced 2026-04-29 15:03:09 +00:00
71 lines
3 KiB
QML
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}
|
|
}
|
|
}
|
|
}
|