diff options
author | Ivan Solovev <ivan.solovev@qt.io> | 2021-08-24 12:16:47 +0200 |
---|---|---|
committer | Qt Cherry-pick Bot <cherrypick_bot@qt-project.org> | 2021-08-31 11:05:24 +0000 |
commit | 387abd437514f21af06795cc592937715b939283 (patch) | |
tree | bf63eac77349eb018cf37331b7b97638b6330ce2 | |
parent | dd73e619e156a0681623419a65509fe2265a0ead (diff) |
QGeoCoordinateAnimation: fix shortest path interpolation
Inspired by CodeChecker warning about dead code.
Fix some copy-paste issues which could lead to incorrect shortest
path estimation when it crosses the -180/180 degree line.
As a drive-by: remove the unneeded initialization of a variable, that
is anyway initialized later. Just to silence another CodeChecker
warning.
Change-Id: I9ebd5900a5ca331ef5846a06cf6415a2f1093400
Reviewed-by: Alex Blasche <alexander.blasche@qt.io>
(cherry picked from commit 5042f54a13899242fa508be7c6531b479236bfc3)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
-rw-r--r-- | src/positioning/qwebmercator.cpp | 2 | ||||
-rw-r--r-- | src/positioningquick/qquickgeocoordinateanimation.cpp | 2 | ||||
-rw-r--r-- | tests/auto/declarative_positioning_core/tst_coordinate.qml | 44 |
3 files changed, 42 insertions, 6 deletions
diff --git a/src/positioning/qwebmercator.cpp b/src/positioning/qwebmercator.cpp index 0aad4100..55b2e600 100644 --- a/src/positioning/qwebmercator.cpp +++ b/src/positioning/qwebmercator.cpp @@ -105,7 +105,7 @@ QGeoCoordinate QWebMercator::coordinateInterpolation(const QGeoCoordinate &from, QDoubleVector2D s = QWebMercator::coordToMercator(from); QDoubleVector2D e = QWebMercator::coordToMercator(to); - double x = s.x(); + double x; if (0.5 < qAbs(e.x() - s.x())) { // handle dateline crossing diff --git a/src/positioningquick/qquickgeocoordinateanimation.cpp b/src/positioningquick/qquickgeocoordinateanimation.cpp index b5d1286c..3f5cef8d 100644 --- a/src/positioningquick/qquickgeocoordinateanimation.cpp +++ b/src/positioningquick/qquickgeocoordinateanimation.cpp @@ -105,7 +105,7 @@ QVariant q_coordinateShortestInterpolator(const QGeoCoordinate &from, const QGeo else if (sx < ex) ex -= 1.0; - x = fromX + (toX - fromX) * progress; + x = sx + (ex - sx) * progress; if (x < 0.0) x += 1.0; diff --git a/tests/auto/declarative_positioning_core/tst_coordinate.qml b/tests/auto/declarative_positioning_core/tst_coordinate.qml index 4b34f7a6..eb5a2573 100644 --- a/tests/auto/declarative_positioning_core/tst_coordinate.qml +++ b/tests/auto/declarative_positioning_core/tst_coordinate.qml @@ -322,12 +322,48 @@ Item { } } - function test_default_coordinate_animation() + function test_default_coordinate_animation(data) { //shortest - coordinate_animation(QtPositioning.coordinate(58.0,12.0), - QtPositioning.coordinate(62.0,24.0), - true) + coordinate_animation(data.from, data.to, data.east) + } + + function test_default_coordinate_animation_data() + { + return [ + { + from: QtPositioning.coordinate(58.0, 12.0), + to: QtPositioning.coordinate(62.0, 24.0), + east: true + }, + { + from: QtPositioning.coordinate(58.0, 24.0), + to: QtPositioning.coordinate(42.0, 12.0), + east: false + }, + // cross 0 + { + from: QtPositioning.coordinate(30, 10), + to: QtPositioning.coordinate(20, -10), + east: false + }, + { + from: QtPositioning.coordinate(30, -20), + to: QtPositioning.coordinate(20, 10), + east: true + }, + // cross 180 + { + from: QtPositioning.coordinate(30, 170), + to: QtPositioning.coordinate(30, -170), + east: true + }, + { + from: QtPositioning.coordinate(30, -170), + to: QtPositioning.coordinate(30, 170), + east: false + }, + ] } function test_east_direction_coordinate_animation(data) |