3
0
mirror of https://github.com/Qortal/Brooklyn.git synced 2025-02-23 15:45:53 +00:00

153 lines
4.5 KiB
QML
Raw Normal View History

2022-03-05 22:41:29 +05:00
/*
SPDX-FileCopyrightText: 2019 Marco Martin <mart@kde.org>
SPDX-License-Identifier: LGPL-2.0-or-later
*/
import QtQuick 2.12
import QtQuick.Layouts 1.1
import org.kde.plasma.core 2.0 as PlasmaCore
import org.kde.plasma.components 3.0 as PlasmaComponents
import org.kde.plasma.private.containmentlayoutmanager 1.0 as ContainmentLayoutManager
import "private"
ContainmentLayoutManager.ConfigOverlay {
id: overlay
opacity: open
Behavior on opacity {
OpacityAnimator {
duration: PlasmaCore.Units.longDuration
easing.type: Easing.InOutQuad
}
}
MultiPointTouchArea {
anchors.fill: parent
property real previousMinX
property real previousMinY
property real previousMaxX
property real previousMaxY
property bool pinching: false
mouseEnabled: false
maximumTouchPoints: 2
touchPoints: [
TouchPoint { id: point1 },
TouchPoint { id: point2 }
]
onPressed: {
overlay.itemContainer.layout.releaseSpace(overlay.itemContainer);
previousMinX = point1.sceneX;
previousMinY = point1.sceneY;
}
onUpdated: {
var minX;
var minY;
var maxX;
var maxY;
if (point1.pressed && point2.pressed) {
minX = Math.min(point1.sceneX, point2.sceneX);
minY = Math.min(point1.sceneY, point2.sceneY);
maxX = Math.max(point1.sceneX, point2.sceneX);
maxY = Math.max(point1.sceneY, point2.sceneY);
} else {
minX = point1.pressed ? point1.sceneX : point2.sceneX;
minY = point1.pressed ? point1.sceneY : point2.sceneY;
maxX = -1;
maxY = -1;
}
if (pinching == (point1.pressed && point2.pressed)) {
overlay.itemContainer.x += minX - previousMinX;
overlay.itemContainer.y += minY - previousMinY;
if (pinching) {
overlay.itemContainer.width += maxX - previousMaxX + previousMinX - minX;
overlay.itemContainer.height += maxY - previousMaxY + previousMinY - minY;
}
overlay.itemContainer.layout.showPlaceHolderForItem(overlay.itemContainer);
}
pinching = point1.pressed && point2.pressed
previousMinX = minX;
previousMinY = minY;
previousMaxX = maxX;
previousMaxY = maxY;
}
onReleased: {
if (point1.pressed || point2.pressed) {
return;
}
overlay.itemContainer.layout.positionItem(overlay.itemContainer);
overlay.itemContainer.layout.hidePlaceHolder();
pinching = false
}
onCanceled: released()
}
BasicResizeHandle {
resizeCorner: ContainmentLayoutManager.ResizeHandle.TopLeft
anchors {
horizontalCenter: parent.left
verticalCenter: parent.top
}
}
BasicResizeHandle {
resizeCorner: ContainmentLayoutManager.ResizeHandle.Left
anchors {
horizontalCenter: parent.left
verticalCenter: parent.verticalCenter
}
}
BasicResizeHandle {
resizeCorner: ContainmentLayoutManager.ResizeHandle.BottomLeft
anchors {
horizontalCenter: parent.left
verticalCenter: parent.bottom
}
}
BasicResizeHandle {
resizeCorner: ContainmentLayoutManager.ResizeHandle.Bottom
anchors {
horizontalCenter: parent.horizontalCenter
verticalCenter: parent.bottom
}
}
BasicResizeHandle {
resizeCorner: ContainmentLayoutManager.ResizeHandle.BottomRight
anchors {
horizontalCenter: parent.right
verticalCenter: parent.bottom
}
}
BasicResizeHandle {
resizeCorner: ContainmentLayoutManager.ResizeHandle.Right
anchors {
horizontalCenter: parent.right
verticalCenter: parent.verticalCenter
}
}
BasicResizeHandle {
resizeCorner: ContainmentLayoutManager.ResizeHandle.TopRight
anchors {
horizontalCenter: parent.right
verticalCenter: parent.top
}
}
BasicResizeHandle {
resizeCorner: ContainmentLayoutManager.ResizeHandle.Top
anchors {
horizontalCenter: parent.horizontalCenter
verticalCenter: parent.top
}
}
}