58 lines
1.4 KiB
QML
58 lines
1.4 KiB
QML
// Copyright (C) 2022 The Qt Company Ltd.
|
|
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
|
|
|
|
import QtQuick
|
|
|
|
Item {
|
|
id: rootItem
|
|
|
|
property var sourceItems: []
|
|
|
|
property Item fromItem
|
|
property Item toItem
|
|
|
|
property var effect
|
|
|
|
property int currentIndex: 0
|
|
property int previousIndex: 0
|
|
property real inAnimation: 0
|
|
readonly property real outAnimation: 1.0 - inAnimation
|
|
// Duration of switch animation, in ms
|
|
property int duration: 1500
|
|
|
|
property bool _initialized: false
|
|
|
|
onCurrentIndexChanged: {
|
|
fromItem = sourceItems[previousIndex];
|
|
toItem = sourceItems[currentIndex];
|
|
if (_initialized)
|
|
switchAnimation.restart();
|
|
previousIndex = currentIndex;
|
|
}
|
|
|
|
// Initialize the items and currentIndex
|
|
Timer {
|
|
running: true
|
|
interval: 0
|
|
onTriggered: {
|
|
fromItem = sourceItems[previousIndex];
|
|
toItem = sourceItems[currentIndex];
|
|
previousIndex = currentIndex;
|
|
_initialized = true;
|
|
}
|
|
}
|
|
|
|
SequentialAnimation {
|
|
id: switchAnimation
|
|
alwaysRunToEnd: true
|
|
NumberAnimation {
|
|
target: rootItem
|
|
property: "inAnimation"
|
|
from: 0
|
|
to: 1
|
|
duration: rootItem.duration
|
|
easing.type: Easing.InOutQuad
|
|
}
|
|
}
|
|
}
|