[core] Check if frameZoom is NaN in Transform::flyTo callback
This commit is contained in:
@@ -293,6 +293,11 @@ void Transform::flyTo(const CameraOptions &camera, const AnimationOptions &anima
|
||||
Point<double> framePoint = util::interpolate(startPoint, endPoint, us);
|
||||
double frameZoom = startZoom + state.scaleZoom(1 / w(s));
|
||||
|
||||
// Zoom can be NaN if size is empty.
|
||||
if (std::isnan(frameZoom)) {
|
||||
frameZoom = zoom;
|
||||
}
|
||||
|
||||
// Convert to geographic coordinates and set the new viewpoint.
|
||||
LatLng frameLatLng = Projection::unproject(framePoint, startScale);
|
||||
state.setLatLngZoom(frameLatLng, frameZoom);
|
||||
|
||||
@@ -36,6 +36,11 @@ TEST(Transform, InvalidZoom) {
|
||||
cameraOptions.center = LatLng { util::LATITUDE_MAX, util::LONGITUDE_MAX };
|
||||
cameraOptions.zoom = transform.getState().getMaxZoom();
|
||||
|
||||
// Executing flyTo with an empty size causes frameZoom to be NaN.
|
||||
transform.flyTo(cameraOptions);
|
||||
transform.updateTransitions(transform.getTransitionStart() + transform.getTransitionDuration());
|
||||
ASSERT_DOUBLE_EQ(transform.getZoom(), transform.getState().getMaxZoom());
|
||||
|
||||
// Executing flyTo with maximum zoom level to the same zoom level causes
|
||||
// frameZoom to be bigger than maximum zoom.
|
||||
transform.resize(Size { 100, 100 });
|
||||
|
||||
Reference in New Issue
Block a user