shift-shell/containments/homescreens/default/package/contents/ui/FlickContainer.qml

79 lines
2.2 KiB
QML

/*
* SPDX-FileCopyrightText: 2021 Devin Lin <devin@kde.org>
*
* SPDX-License-Identifier: LGPL-2.0-or-later
*/
import QtQuick 2.15
import QtQuick.Layouts 1.15
import org.kde.taskmanager 0.1 as TaskManager
import org.kde.plasma.core 2.1 as PlasmaCore
import org.kde.plasma.components 3.0 as PlasmaComponents
import org.kde.plasma.private.nanoshell 2.0 as NanoShell
import org.kde.plasma.private.mobileshell 1.0 as MobileShell
MobileShell.Flickable {
id: root
required property var homeScreenState
// we use flickable solely for capturing flicks, not positioning elements
contentWidth: width + 99999
contentHeight: height + 99999
contentX: startContentX
contentY: startContentY
readonly property real startContentX: contentWidth / 2
readonly property real startContentY: contentHeight / 2
// update position from flickable movement
property real oldContentX
property real oldContentY
onContentXChanged: {
homeScreenState.updatePositionWithOffset(contentX - oldContentX, 0);
oldContentX = contentX;
}
onContentYChanged: {
homeScreenState.updatePositionWithOffset(0, -(contentY - oldContentY));
oldContentY = contentY;
}
onMovementStarted: homeScreenState.cancelAnimations();
onMovementEnded: {
if (!homeScreenState.animationsRunning) {
homeScreenState.updateState();
}
resetPosition();
}
onFlickEnded: {
homeScreenState.cancelEditModeForItemsRequested()
resetPosition();
}
onDragStarted: homeScreenState.cancelEditModeForItemsRequested()
onDragEnded: homeScreenState.cancelEditModeForItemsRequested()
onFlickStarted: {
homeScreenState.cancelEditModeForItemsRequested();
root.cancelFlick();
}
onDraggingChanged: {
if (!dragging) {
resetPosition();
if (!homeScreenState.animationsRunning) {
homeScreenState.updateState();
}
} else {
homeScreenState.cancelAnimations();
}
}
function resetPosition() {
oldContentX = startContentX;
contentX = startContentX;
oldContentY = startContentY;
contentY = startContentY;
}
}