diff options
author | Bruno de Oliveira Abinader <bruno@mapbox.com> | 2018-11-23 22:47:40 +0200 |
---|---|---|
committer | Bruno de Oliveira Abinader <bruno@mapbox.com> | 2018-11-25 11:53:51 +0200 |
commit | df783a28c0df4d624f31c002a677f6b67dcf9bfd (patch) | |
tree | ceea258de1c6a8ab1921edd9d106c2db890d008a | |
parent | 22f97611eddc0af8ea79b2d46e3d78b6bd339567 (diff) | |
download | qtlocation-mapboxgl-df783a28c0df4d624f31c002a677f6b67dcf9bfd.tar.gz |
[core] Camera center and anchor points are mutually exclusive
-rw-r--r-- | src/mbgl/map/transform.cpp | 5 | ||||
-rw-r--r-- | test/map/transform.test.cpp | 17 |
2 files changed, 21 insertions, 1 deletions
diff --git a/src/mbgl/map/transform.cpp b/src/mbgl/map/transform.cpp index 9b2e2a7812..4b82a51fac 100644 --- a/src/mbgl/map/transform.cpp +++ b/src/mbgl/map/transform.cpp @@ -554,7 +554,10 @@ void Transform::startTransition(const CameraOptions& camera, observer.onCameraWillChange(isAnimated ? MapObserver::CameraChangeMode::Animated : MapObserver::CameraChangeMode::Immediate); // Associate the anchor, if given, with a coordinate. - optional<ScreenCoordinate> anchor = camera.anchor; + // Anchor and center points are mutually exclusive, with preference for the center point when + // both camera options are present. + assert(!camera.anchor || !camera.center); + optional<ScreenCoordinate> anchor = camera.center ? nullopt : camera.anchor; LatLng anchorLatLng; if (anchor) { anchor->y = state.size.height - anchor->y; diff --git a/test/map/transform.test.cpp b/test/map/transform.test.cpp index 44b5f49366..ed923d85c0 100644 --- a/test/map/transform.test.cpp +++ b/test/map/transform.test.cpp @@ -476,6 +476,23 @@ TEST(Transform, Camera) { transform.updateTransitions(transform.getTransitionStart() + Milliseconds(750)); transform.updateTransitions(transform.getTransitionStart() + transform.getTransitionDuration()); ASSERT_FALSE(transform.inTransition()); + + // Anchor and center points are mutually exclusive. + CameraOptions camera; + camera.center = LatLng { 0, 0 }; + camera.anchor = ScreenCoordinate { 0, 0 }; // top-left + camera.zoom = transform.getState().getMaxZoom(); +#ifndef NDEBUG + ASSERT_DEATH(transform.jumpTo(camera), R"test(!camera.anchor \|\| !camera.center)test"); +#else + transform.easeTo(camera, AnimationOptions(Seconds(1))); + transform.updateTransitions(transform.getTransitionStart() + Milliseconds(250)); + transform.updateTransitions(transform.getTransitionStart() + Milliseconds(500)); + transform.updateTransitions(transform.getTransitionStart() + Milliseconds(750)); + transform.updateTransitions(transform.getTransitionStart() + transform.getTransitionDuration()); + ASSERT_DOUBLE_EQ(transform.getLatLng().latitude(), 0); + ASSERT_DOUBLE_EQ(transform.getLatLng().longitude(), 0); +#endif // NDEBUG } TEST(Transform, DefaultTransform) { |