more natural switching behavior

This commit is contained in:
Marco Martin 2021-03-25 17:04:59 +01:00
parent f8cc7100aa
commit 6366d5bfaf
2 changed files with 41 additions and 7 deletions

View file

@ -84,6 +84,18 @@ Flickable {
scrollAnim.running = true; 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 { Timer {
id: autoScrollTimer id: autoScrollTimer
property bool scrollRight: true property bool scrollRight: true
@ -107,6 +119,8 @@ Flickable {
mainFlickable: mainFlickable mainFlickable: mainFlickable
enabled: root.focus && appDrawer.status !== AppDrawer.Status.Open && !appletsLayout.editMode && !plasmoid.editMode && !launcherDragManager.active enabled: root.focus && appDrawer.status !== AppDrawer.Status.Open && !appletsLayout.editMode && !plasmoid.editMode && !launcherDragManager.active
onSnapPage: mainFlickable.snapPage(); onSnapPage: mainFlickable.snapPage();
onSnapNextPage: mainFlickable.snapNextPage();
onSnapPrevPage: mainFlickable.snapPrevPage();
} }
NumberAnimation { NumberAnimation {

View file

@ -17,10 +17,13 @@ DragHandler {
property Flickable mainFlickable property Flickable mainFlickable
property Launcher.AppDrawer appDrawer property Launcher.AppDrawer appDrawer
signal snapPage signal snapPage
signal snapNextPage
signal snapPrevPage
enum ScrollDirection { enum ScrollDirection {
None, None,
Horizontal, Left,
Right,
Vertical Vertical
} }
@ -31,16 +34,27 @@ DragHandler {
if (root.appDrawer.offset > PlasmaCore.Units.gridUnit) { if (root.appDrawer.offset > PlasmaCore.Units.gridUnit) {
__scrollDirection = DragGestureHandler.Vertical; __scrollDirection = DragGestureHandler.Vertical;
snapPage(); snapPage();
} else if (Math.abs(mainFlickable.contentX - __initialMainFlickableX) > PlasmaCore.Units.gridUnit) { } else if (mainFlickable.contentX - __initialMainFlickableX > PlasmaCore.Units.gridUnit) {
__scrollDirection = DragGestureHandler.Horizontal; __scrollDirection = DragGestureHandler.Right;
root.appDrawer.close();
} else if (__initialMainFlickableX - mainFlickable.contentX > PlasmaCore.Units.gridUnit) {
__scrollDirection = DragGestureHandler.Left;
root.appDrawer.close(); root.appDrawer.close();
} }
if (__scrollDirection !== DragGestureHandler.Horizontal) { if (__scrollDirection !== DragGestureHandler.Left || __scrollDirection !== DragGestureHandler.Right) {
root.appDrawer.offset = -translation.y; root.appDrawer.offset = -translation.y;
} }
if (__scrollDirection !== DragGestureHandler.Vertical) { 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) { if (active) {
__initialMainFlickableX = mainFlickable.contentX; __initialMainFlickableX = mainFlickable.contentX;
} else { } else {
__scrollDirection = DragGestureHandler.None;
root.appDrawer.snapDrawerStatus(); 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;
} }
} }
} }