diff options
Diffstat (limited to 'src/quick/items/qquickitemanimation.cpp')
-rw-r--r-- | src/quick/items/qquickitemanimation.cpp | 113 |
1 files changed, 32 insertions, 81 deletions
diff --git a/src/quick/items/qquickitemanimation.cpp b/src/quick/items/qquickitemanimation.cpp index 23694e2de3..11b2642748 100644 --- a/src/quick/items/qquickitemanimation.cpp +++ b/src/quick/items/qquickitemanimation.cpp @@ -1,41 +1,5 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the QtQuick module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ +// Copyright (C) 2016 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only #include "qquickitemanimation_p.h" #include "qquickitemanimation_p_p.h" @@ -93,10 +57,6 @@ QQuickParentAnimation::QQuickParentAnimation(QObject *parent) { } -QQuickParentAnimation::~QQuickParentAnimation() -{ -} - /*! \qmlproperty Item QtQuick::ParentAnimation::target The item to reparent. @@ -213,7 +173,7 @@ struct QQuickParentAnimationData : public QAbstractAnimationAction QList<QQuickParentChange *> pc; void doAction() override { - for (int ii = 0; ii < actions.count(); ++ii) { + for (int ii = 0; ii < actions.size(); ++ii) { const QQuickStateAction &action = actions.at(ii); if (reverse) action.event->reverse(); @@ -230,8 +190,8 @@ QAbstractAnimationJob* QQuickParentAnimation::transition(QQuickStateActions &act { Q_D(QQuickParentAnimation); - QQuickParentAnimationData *data = new QQuickParentAnimationData; - QQuickParentAnimationData *viaData = new QQuickParentAnimationData; + std::unique_ptr<QQuickParentAnimationData> data(new QQuickParentAnimationData); + std::unique_ptr<QQuickParentAnimationData> viaData(new QQuickParentAnimationData); bool hasExplicit = false; if (d->target && d->newParent) { @@ -369,7 +329,7 @@ QAbstractAnimationJob* QQuickParentAnimation::transition(QQuickStateActions &act } } - if (data->actions.count()) { + if (data->actions.size()) { QSequentialAnimationGroupJob *topLevelGroup = new QSequentialAnimationGroupJob; QActionAnimation *viaAction = d->via ? new QActionAnimation : nullptr; QActionAnimation *targetAction = new QActionAnimation; @@ -377,13 +337,13 @@ QAbstractAnimationJob* QQuickParentAnimation::transition(QQuickStateActions &act QParallelAnimationGroupJob *ag = new QParallelAnimationGroupJob; if (d->via) - viaAction->setAnimAction(viaData); - targetAction->setAnimAction(data); + viaAction->setAnimAction(viaData.release()); + targetAction->setAnimAction(data.release()); //take care of any child animations bool valid = d->defaultProperty.isValid(); QAbstractAnimationJob* anim; - for (int ii = 0; ii < d->animations.count(); ++ii) { + for (int ii = 0; ii < d->animations.size(); ++ii) { if (valid) d->animations.at(ii)->setDefaultTarget(d->defaultProperty); anim = d->animations.at(ii)->transition(actions, modified, direction, defaultTarget); @@ -405,9 +365,6 @@ QAbstractAnimationJob* QQuickParentAnimation::transition(QQuickStateActions &act topLevelGroup->appendAnimation(d->via ? viaAction : targetAction); } return initInstance(topLevelGroup); - } else { - delete data; - delete viaData; } return nullptr; } @@ -442,10 +399,6 @@ QQuickAnchorAnimation::QQuickAnchorAnimation(QObject *parent) { } -QQuickAnchorAnimation::~QQuickAnchorAnimation() -{ -} - /*! \qmlproperty list<Item> QtQuick::AnchorAnimation::targets The items to reanchor. @@ -532,10 +485,10 @@ QAbstractAnimationJob* QQuickAnchorAnimation::transition(QQuickStateActions &act data->interpolatorType = QMetaType::QReal; data->interpolator = d->interpolator; data->reverse = direction == Backward ? true : false; - data->fromSourced = false; - data->fromDefined = false; + data->fromIsSourced = false; + data->fromIsDefined = false; - for (int ii = 0; ii < actions.count(); ++ii) { + for (int ii = 0; ii < actions.size(); ++ii) { QQuickStateAction &action = actions[ii]; if (action.event && action.event->type() == QQuickStateActionEvent::AnchorChanges && (d->targets.isEmpty() || d->targets.contains(static_cast<QQuickAnchorChanges*>(action.event)->object()))) { @@ -544,9 +497,9 @@ QAbstractAnimationJob* QQuickAnchorAnimation::transition(QQuickStateActions &act } QQuickBulkValueAnimator *animator = new QQuickBulkValueAnimator; - if (data->actions.count()) { + if (data->actions.size()) { animator->setAnimValue(data); - animator->setFromSourcedValue(&data->fromSourced); + animator->setFromIsSourcedValue(&data->fromIsSourced); } else { delete data; } @@ -817,13 +770,13 @@ void QQuickPathAnimation::setOrientationExitDuration(int duration) qreal QQuickPathAnimation::endRotation() const { Q_D(const QQuickPathAnimation); - return d->endRotation.isNull ? qreal(0) : d->endRotation.value; + return d->endRotation.isValid() ? d->endRotation.value() : qreal(0); } void QQuickPathAnimation::setEndRotation(qreal rotation) { Q_D(QQuickPathAnimation); - if (!d->endRotation.isNull && d->endRotation == rotation) + if (d->endRotation.isValid() && d->endRotation == rotation) return; d->endRotation = rotation; @@ -867,12 +820,12 @@ QAbstractAnimationJob* QQuickPathAnimation::transition(QQuickStateActions &actio data->exitInterval = d->duration ? qreal(d->exitDuration) / d->duration : qreal(0); data->endRotation = d->endRotation; data->reverse = direction == Backward ? true : false; - data->fromSourced = false; - data->fromDefined = (d->path && d->path->hasStartX() && d->path->hasStartY()) ? true : false; - data->toDefined = d->path ? true : false; - int origModifiedSize = modified.count(); + data->fromIsSourced = false; + data->fromIsDefined = (d->path && d->path->hasStartX() && d->path->hasStartY()) ? true : false; + data->toIsDefined = d->path ? true : false; + int origModifiedSize = modified.size(); - for (int i = 0; i < actions.count(); ++i) { + for (int i = 0; i < actions.size(); ++i) { QQuickStateAction &action = actions[i]; if (action.event) continue; @@ -888,8 +841,7 @@ QAbstractAnimationJob* QQuickPathAnimation::transition(QQuickStateActions &actio } } - if (target && d->path && - (modified.count() > origModifiedSize || data->toDefined)) { + if (target && d->path && (modified.size() > origModifiedSize || data->toIsDefined)) { data->target = target; data->path = d->path; data->path->invalidateSequentialHistory(); @@ -900,13 +852,13 @@ QAbstractAnimationJob* QQuickPathAnimation::transition(QQuickStateActions &actio // treat interruptions specially, otherwise we end up with strange paths if ((data->reverse || prevData.reverse) && prevData.currentV > 0 && prevData.currentV < 1) { - if (!data->fromDefined && !data->toDefined && !prevData.painterPath.isEmpty()) { + if (!data->fromIsDefined && !data->toIsDefined && !prevData.painterPath.isEmpty()) { QPointF pathPos = QQuickPath::sequentialPointAt(prevData.painterPath, prevData.pathLength, prevData.attributePoints, prevData.prevBez, prevData.currentV); if (!prevData.anchorPoint.isNull()) pathPos -= prevData.anchorPoint; if (pathPos == data->target->position()) { //only treat as interruption if we interrupted ourself data->painterPath = prevData.painterPath; - data->toDefined = data->fromDefined = data->fromSourced = true; + data->toIsDefined = data->fromIsDefined = data->fromIsSourced = true; data->prevBez.isValid = false; data->interruptStart = prevData.currentV; data->startRotation = prevData.startRotation; @@ -916,13 +868,13 @@ QAbstractAnimationJob* QQuickPathAnimation::transition(QQuickStateActions &actio } } } - pa->setFromSourcedValue(&data->fromSourced); + pa->setFromIsSourcedValue(&data->fromIsSourced); pa->setAnimValue(data); pa->setDuration(d->duration); pa->setEasingCurve(d->easingCurve); return initInstance(pa); } else { - pa->setFromSourcedValue(nullptr); + pa->setFromIsSourcedValue(nullptr); pa->setAnimValue(nullptr); delete pa; delete data; @@ -942,7 +894,7 @@ void QQuickPathAnimationUpdater::setValue(qreal v) } currentV = v; bool atStart = ((reverse && v == 1.0) || (!reverse && v == 0.0)); - if (!fromSourced && (!fromDefined || !toDefined)) { + if (!fromIsSourced && (!fromIsDefined || !toIsDefined)) { qreal startX = reverse ? toX + anchorPoint.x() : target->x() + anchorPoint.x(); qreal startY = reverse ? toY + anchorPoint.y() : target->y() + anchorPoint.y(); qreal endX = reverse ? target->x() + anchorPoint.x() : toX + anchorPoint.x(); @@ -950,7 +902,7 @@ void QQuickPathAnimationUpdater::setValue(qreal v) prevBez.isValid = false; painterPath = path->createPath(QPointF(startX, startY), QPointF(endX, endY), QStringList(), pathLength, attributePoints); - fromSourced = true; + fromIsSourced = true; } qreal angle; @@ -994,11 +946,11 @@ void QQuickPathAnimationUpdater::setValue(qreal v) //shortest distance to correct orientation qreal diff = angle - startRotation; while (diff > 180.0) { - startRotation.value += 360.0; + startRotation = startRotation.value() + 360.0; diff -= 360.0; } while (diff < -180.0) { - startRotation.value -= 360.0; + startRotation = startRotation.value() - 360.0; diff += 360.0; } } @@ -1041,9 +993,8 @@ QQuickPathAnimationAnimator::QQuickPathAnimationAnimator(QQuickPathAnimationPriv QQuickPathAnimationAnimator::~QQuickPathAnimationAnimator() { if (animationTemplate && pathUpdater()) { - QHash<QQuickItem*, QQuickPathAnimationAnimator* >::iterator it = - animationTemplate->activeAnimations.find(pathUpdater()->target); - if (it != animationTemplate->activeAnimations.end() && it.value() == this) + auto it = animationTemplate->activeAnimations.constFind(pathUpdater()->target); + if (it != animationTemplate->activeAnimations.cend() && it.value() == this) animationTemplate->activeAnimations.erase(it); } } |