summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIvan Solovev <ivan.solovev@qt.io>2021-08-24 12:16:47 +0200
committerIvan Solovev <ivan.solovev@qt.io>2021-08-31 12:42:59 +0200
commit5042f54a13899242fa508be7c6531b479236bfc3 (patch)
tree020c888de52b69c1f96499bf8dd7ad15be454d25
parent965c80c5db88dd94b666228d432b226c496c9d30 (diff)
downloadqtlocation-5042f54a13899242fa508be7c6531b479236bfc3.tar.gz
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. Pick-to: 6.2 Change-Id: I9ebd5900a5ca331ef5846a06cf6415a2f1093400 Reviewed-by: Alex Blasche <alexander.blasche@qt.io>
-rw-r--r--src/positioning/qwebmercator.cpp2
-rw-r--r--src/positioningquick/qquickgeocoordinateanimation.cpp2
-rw-r--r--tests/auto/declarative_positioning_core/tst_coordinate.qml44
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)