1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154
|
/*
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
LayoutMirroring.enabled: false
LayoutMirroring.childrenInherit: true
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: {
let minX;
let minY;
let maxX;
let 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
}
}
}
|