mirror of
https://invent.kde.org/marcoa/shift-shell.git
synced 2026-04-29 15:03: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;
|
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 {
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue