mirror of
https://invent.kde.org/marcoa/shift-shell.git
synced 2026-04-26 14:23:09 +00:00
more natural switching behavior
This commit is contained in:
parent
f8cc7100aa
commit
6366d5bfaf
2 changed files with 41 additions and 7 deletions
|
|
@ -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 {
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue