-// Commit: 160f1867868cdea916923652b00484ed11f90aaa
/****************************************************************************
**
-** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: http://www.qt-project.org/
+** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
+** This file is part of the QtQml 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 Digia. For licensing terms and
+** conditions see http://qt.digia.com/licensing. For further information
+** use the contact form at http://qt.digia.com/contact-us.
+**
** GNU Lesser General Public License Usage
-** This file may be used under the terms of the GNU Lesser General Public
-** License version 2.1 as published by the Free Software Foundation and
-** appearing in the file LICENSE.LGPL included in the packaging of this
-** file. Please review the following information to ensure the GNU Lesser
-** General Public License version 2.1 requirements will be met:
-** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights. These rights are described in the Nokia Qt LGPL Exception
+** In addition, as a special exception, Digia gives you certain additional
+** rights. These rights are described in the Digia Qt LGPL Exception
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
**
** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU General
-** Public License version 3.0 as published by the Free Software Foundation
-** and appearing in the file LICENSE.GPL included in the packaging of this
-** file. Please review the following information to ensure the GNU General
-** Public License version 3.0 requirements will be met:
-** http://www.gnu.org/copyleft/gpl.html.
-**
-** Other Usage
-** Alternatively, this file may be used in accordance with the terms and
-** conditions contained in a signed written agreement between you and Nokia.
-**
-**
-**
-**
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
**
**
** $QT_END_LICENSE$
#include "qquickitem_p.h"
#include "qquickitemchangelistener_p.h"
-#include <QtDeclarative/qdeclarative.h>
+#include <QtQml/qqml.h>
#include <QtCore/qdatetime.h>
#include "qplatformdefs.h"
-#include <private/qdeclarativetimeline_p_p.h>
-#include <private/qdeclarativeanimation_p_p.h>
+#include <private/qquicktimeline_p_p.h>
+#include <private/qquickanimation_p_p.h>
+#include <private/qquicktransitionmanager_p_p.h>
QT_BEGIN_NAMESPACE
const qreal MinimumFlickVelocity = 75.0;
class QQuickFlickableVisibleArea;
-class QQuickFlickablePrivate : public QQuickItemPrivate, public QQuickItemChangeListener
+class QQuickTransition;
+class QQuickFlickableReboundTransition;
+
+class Q_AUTOTEST_EXPORT QQuickFlickablePrivate : public QQuickItemPrivate, public QQuickItemChangeListener
{
Q_DECLARE_PUBLIC(QQuickFlickable)
QQuickFlickablePrivate();
void init();
- struct Velocity : public QDeclarativeTimeLineValue
+ struct Velocity : public QQuickTimeLineValue
{
Velocity(QQuickFlickablePrivate *p)
: parent(p) {}
virtual void setValue(qreal v) {
if (v != value()) {
- QDeclarativeTimeLineValue::setValue(v);
+ QQuickTimeLineValue::setValue(v);
parent->updateVelocity();
}
}
struct AxisData {
AxisData(QQuickFlickablePrivate *fp, void (QQuickFlickablePrivate::*func)(qreal))
- : move(fp, func), viewSize(-1), startMargin(0), endMargin(0)
+ : move(fp, func)
+ , transitionToBounds(0)
+ , viewSize(-1), startMargin(0), endMargin(0)
+ , origin(0)
+ , transitionTo(0)
+ , continuousFlickVelocity(0), vTime(0)
, smoothVelocity(fp), atEnd(false), atBeginning(true)
+ , transitionToSet(false)
, fixingUp(false), inOvershoot(false), moving(false), flicking(false)
, dragging(false), extentsChanged(false)
, explicitValue(false), minExtentDirty(true), maxExtentDirty(true)
{}
+ ~AxisData();
+
void reset() {
velocityBuffer.clear();
dragStartOffset = 0;
extentsChanged = true;
}
+ void resetTransitionTo() {
+ transitionTo = 0;
+ transitionToSet = false;
+ }
+
void addVelocitySample(qreal v, qreal maxVelocity);
void updateVelocity();
- QDeclarativeTimeLineValueProxy<QQuickFlickablePrivate> move;
+ QQuickTimeLineValueProxy<QQuickFlickablePrivate> move;
+ QQuickFlickableReboundTransition *transitionToBounds;
qreal viewSize;
qreal pressPos;
+ qreal lastPos;
qreal dragStartOffset;
qreal dragMinBound;
qreal dragMaxBound;
qreal flickTarget;
qreal startMargin;
qreal endMargin;
+ qreal origin;
+ qreal transitionTo;
+ qreal continuousFlickVelocity;
+ QElapsedTimer velocityTime;
+ int vTime;
QQuickFlickablePrivate::Velocity smoothVelocity;
QPODVector<qreal,10> velocityBuffer;
bool atEnd : 1;
bool atBeginning : 1;
+ bool transitionToSet : 1;
bool fixingUp : 1;
bool inOvershoot : 1;
bool moving : 1;
mutable bool maxExtentDirty : 1;
};
- void flickX(qreal velocity);
- void flickY(qreal velocity);
- virtual void flick(AxisData &data, qreal minExtent, qreal maxExtent, qreal vSize,
- QDeclarativeTimeLineCallback::Callback fixupCallback, qreal velocity);
+ bool flickX(qreal velocity);
+ bool flickY(qreal velocity);
+ virtual bool flick(AxisData &data, qreal minExtent, qreal maxExtent, qreal vSize,
+ QQuickTimeLineCallback::Callback fixupCallback, qreal velocity);
+ void flickingStarted(bool flickingH, bool flickingV);
void fixupX();
void fixupY();
virtual void fixup(AxisData &data, qreal minExtent, qreal maxExtent);
+ void adjustContentPos(AxisData &data, qreal toPos);
+ void resetTimeline(AxisData &data);
+ void clearTimeline();
void updateBeginningEnd();
void draggingStarting();
void draggingEnding();
+ bool isViewMoving() const;
+
public:
QQuickItem *contentItem;
AxisData hData;
AxisData vData;
- QDeclarativeTimeLine timeline;
+ QQuickTimeLine timeline;
bool hMoved : 1;
bool vMoved : 1;
bool stealMouse : 1;
QPointF pressPos;
qreal deceleration;
qreal maxVelocity;
- QElapsedTimer velocityTime;
- QPointF lastFlickablePosition;
qreal reportedVelocitySmoothing;
QMouseEvent *delayedPressEvent;
QQuickItem *delayedPressTarget;
QBasicTimer delayedPressTimer;
int pressDelay;
int fixupDuration;
+ qreal flickBoost;
enum FixupMode { Normal, Immediate, ExtentChanged };
FixupMode fixupMode;
void updateVelocity();
int vTime;
- QDeclarativeTimeLine velocityTimeline;
+ QQuickTimeLine velocityTimeline;
QQuickFlickableVisibleArea *visibleArea;
QQuickFlickable::FlickableDirection flickableDirection;
QQuickFlickable::BoundsBehavior boundsBehavior;
+ QQuickTransition *rebound;
+
+ void viewportAxisMoved(AxisData &data, qreal minExtent, qreal maxExtent, qreal vSize,
+ QQuickTimeLineCallback::Callback fixupCallback);
void handleMousePressEvent(QMouseEvent *);
void handleMouseMoveEvent(QMouseEvent *);
qint64 computeCurrentTime(QInputEvent *event);
// flickableData property
- static void data_append(QDeclarativeListProperty<QObject> *, QObject *);
- static int data_count(QDeclarativeListProperty<QObject> *);
- static QObject *data_at(QDeclarativeListProperty<QObject> *, int);
- static void data_clear(QDeclarativeListProperty<QObject> *);
+ static void data_append(QQmlListProperty<QObject> *, QObject *);
+ static int data_count(QQmlListProperty<QObject> *);
+ static QObject *data_at(QQmlListProperty<QObject> *, int);
+ static void data_clear(QQmlListProperty<QObject> *);
};
class QQuickFlickableVisibleArea : public QObject