From 6366d5bfafcd623a955950817517e693dfd89c42 Mon Sep 17 00:00:00 2001 From: Marco Martin Date: Thu, 25 Mar 2021 17:04:59 +0100 Subject: [PATCH] more natural switching behavior --- .../contents/ui/launcher/FlickablePages.qml | 14 ++++++++ .../launcher/private/DragGestureHandler.qml | 34 +++++++++++++++---- 2 files changed, 41 insertions(+), 7 deletions(-) diff --git a/containments/homescreen/package/contents/ui/launcher/FlickablePages.qml b/containments/homescreen/package/contents/ui/launcher/FlickablePages.qml index bc1331f7..6eae760c 100644 --- a/containments/homescreen/package/contents/ui/launcher/FlickablePages.qml +++ b/containments/homescreen/package/contents/ui/launcher/FlickablePages.qml @@ -84,6 +84,18 @@ Flickable { scrollAnim.running = true; } + function snapNextPage() { + scrollAnim.running = false; + scrollAnim.to = mainFlickable.width * Math.ceil(mainFlickable.contentX / mainFlickable.width) + scrollAnim.running = true; + } + + function snapPrevPage() { + scrollAnim.running = false; + scrollAnim.to = mainFlickable.width * Math.floor(mainFlickable.contentX / mainFlickable.width) + scrollAnim.running = true; + } + Timer { id: autoScrollTimer property bool scrollRight: true @@ -107,6 +119,8 @@ Flickable { mainFlickable: mainFlickable enabled: root.focus && appDrawer.status !== AppDrawer.Status.Open && !appletsLayout.editMode && !plasmoid.editMode && !launcherDragManager.active onSnapPage: mainFlickable.snapPage(); + onSnapNextPage: mainFlickable.snapNextPage(); + onSnapPrevPage: mainFlickable.snapPrevPage(); } NumberAnimation { diff --git a/containments/homescreen/package/contents/ui/launcher/private/DragGestureHandler.qml b/containments/homescreen/package/contents/ui/launcher/private/DragGestureHandler.qml index 1a34e2bf..88a819ff 100644 --- a/containments/homescreen/package/contents/ui/launcher/private/DragGestureHandler.qml +++ b/containments/homescreen/package/contents/ui/launcher/private/DragGestureHandler.qml @@ -17,10 +17,13 @@ DragHandler { property Flickable mainFlickable property Launcher.AppDrawer appDrawer signal snapPage + signal snapNextPage + signal snapPrevPage enum ScrollDirection { None, - Horizontal, + Left, + Right, Vertical } @@ -31,16 +34,27 @@ DragHandler { if (root.appDrawer.offset > PlasmaCore.Units.gridUnit) { __scrollDirection = DragGestureHandler.Vertical; snapPage(); - } else if (Math.abs(mainFlickable.contentX - __initialMainFlickableX) > PlasmaCore.Units.gridUnit) { - __scrollDirection = DragGestureHandler.Horizontal; + } else if (mainFlickable.contentX - __initialMainFlickableX > PlasmaCore.Units.gridUnit) { + __scrollDirection = DragGestureHandler.Right; + root.appDrawer.close(); + } else if (__initialMainFlickableX - mainFlickable.contentX > PlasmaCore.Units.gridUnit) { + __scrollDirection = DragGestureHandler.Left; root.appDrawer.close(); } - if (__scrollDirection !== DragGestureHandler.Horizontal) { + if (__scrollDirection !== DragGestureHandler.Left || __scrollDirection !== DragGestureHandler.Right) { root.appDrawer.offset = -translation.y; } if (__scrollDirection !== DragGestureHandler.Vertical) { - mainFlickable.contentX = Math.min((mainFlickable.width * mainFlickable.totalPages) - mainFlickable.width, Math.max(0, __initialMainFlickableX - translation.x)) + let newContentX = Math.min((mainFlickable.width * mainFlickable.totalPages) - mainFlickable.width, Math.max(0, __initialMainFlickableX - translation.x)); + + if (mainFlickable.contentX < newContentX) { + __scrollDirection = DragGestureHandler.Right; + } else { + __scrollDirection = DragGestureHandler.Left; + } + + mainFlickable.contentX = newContentX; } } } @@ -48,9 +62,15 @@ DragHandler { if (active) { __initialMainFlickableX = mainFlickable.contentX; } else { - __scrollDirection = DragGestureHandler.None; root.appDrawer.snapDrawerStatus(); - snapPage(); + if (__scrollDirection === DragGestureHandler.Left && (__initialMainFlickableX - mainFlickable.contentX > PlasmaCore.Units.gridUnit * 5)) { + snapPrevPage(); + } else if (__scrollDirection === DragGestureHandler.Right && (mainFlickable.contentX - __initialMainFlickableX > PlasmaCore.Units.gridUnit * 5)) { + snapNextPage(); + } else {print("normal"); + snapPage(); + } + __scrollDirection = DragGestureHandler.None; } } }