diff options
author | Michal Klocek <michal.klocek@theqtcompany.com> | 2015-06-17 16:38:44 +0200 |
---|---|---|
committer | Michal Klocek <michal.klocek@theqtcompany.com> | 2015-06-30 13:13:29 +0000 |
commit | af821cdc792bb0057c920f264bcb564988e0ff88 (patch) | |
tree | d02657fe14d5cdd985f411d218aefb4f7f56327b /src/imports/positioning | |
parent | 5406993e597cc0747993388486331539222f190c (diff) | |
download | qtlocation-af821cdc792bb0057c920f264bcb564988e0ff88.tar.gz |
Fix map flick animation in qdeclarativegeomapgesturearea
Current implementation is using QPropertyAnimation for flick, which was
suitable for old QML1. Use QQuickCoordinateAnimation instead.
This change is necessary to control what type of coordinate
interpolation is used for flicks. It reverts
58d8b5e84ac6952b411cff3bca7336073349290e.
Task-number: QTBUG-46147
Change-Id: I0a3bf263147b3733c617d38c364f66173b806de5
Reviewed-by: Alex Blasche <alexander.blasche@theqtcompany.com>
Diffstat (limited to 'src/imports/positioning')
-rw-r--r-- | src/imports/positioning/positioning.cpp | 2 | ||||
-rw-r--r-- | src/imports/positioning/qquickgeocoordinateanimation.cpp | 17 | ||||
-rw-r--r-- | src/imports/positioning/qquickgeocoordinateanimation_p.h | 2 |
3 files changed, 19 insertions, 2 deletions
diff --git a/src/imports/positioning/positioning.cpp b/src/imports/positioning/positioning.cpp index ef8eb776..4ac9b2e5 100644 --- a/src/imports/positioning/positioning.cpp +++ b/src/imports/positioning/positioning.cpp @@ -517,7 +517,7 @@ public: qRegisterMetaType<QGeoShape>(); QMetaType::registerEqualsComparator<QGeoShape>(); - qRegisterAnimationInterpolator<QGeoCoordinate>(geoCoordinateInterpolator); + qRegisterAnimationInterpolator<QGeoCoordinate>(q_coordinateShortestInterpolator); // Register the 5.0 types // 5.0 is silent and not advertised diff --git a/src/imports/positioning/qquickgeocoordinateanimation.cpp b/src/imports/positioning/qquickgeocoordinateanimation.cpp index ed66b794..0c98aafb 100644 --- a/src/imports/positioning/qquickgeocoordinateanimation.cpp +++ b/src/imports/positioning/qquickgeocoordinateanimation.cpp @@ -63,6 +63,21 @@ QT_BEGIN_NAMESPACE \sa {Animation and Transitions in Qt Quick} */ +QVariant q_coordinateShortestInterpolator(const QGeoCoordinate &from, const QGeoCoordinate &to, qreal progress) +{ + if (from == to) { + if (progress < 0.5) { + return QVariant::fromValue(from); + } else { + return QVariant::fromValue(to); + } + } + + QGeoCoordinate result = QGeoProjection::coordinateInterpolation(from, to, progress); + + return QVariant::fromValue(result); +} + QVariant q_coordinateWestInterpolator(const QGeoCoordinate &from, const QGeoCoordinate &to, qreal progress) { QDoubleVector2D fromVector = QGeoProjection::coordToMercator(from); @@ -197,7 +212,7 @@ void QQuickGeoCoordinateAnimation::setDirection(QQuickGeoCoordinateAnimation::Di break; case Shortest: default: - d->interpolator = QVariantAnimationPrivate::getInterpolator(d->interpolatorType); + d->interpolator = reinterpret_cast<QVariantAnimation::Interpolator>(&q_coordinateShortestInterpolator); break; } emit directionChanged(); diff --git a/src/imports/positioning/qquickgeocoordinateanimation_p.h b/src/imports/positioning/qquickgeocoordinateanimation_p.h index 8c93a0b0..e776b2b8 100644 --- a/src/imports/positioning/qquickgeocoordinateanimation_p.h +++ b/src/imports/positioning/qquickgeocoordinateanimation_p.h @@ -73,6 +73,8 @@ Q_SIGNALS: void directionChanged(); }; +QVariant q_coordinateShortestInterpolator(const QGeoCoordinate &from, const QGeoCoordinate &to, qreal progress); + QT_END_NAMESPACE QML_DECLARE_TYPE(QQuickGeoCoordinateAnimation) |