diff --git a/drape_frontend/drape_frontend_tests/user_event_stream_tests.cpp b/drape_frontend/drape_frontend_tests/user_event_stream_tests.cpp index 590a1318bd..8ce2d76bab 100644 --- a/drape_frontend/drape_frontend_tests/user_event_stream_tests.cpp +++ b/drape_frontend/drape_frontend_tests/user_event_stream_tests.cpp @@ -39,6 +39,7 @@ public: void OnAnimationStarted(ref_ptr /* anim */) override {} void OnPerspectiveSwitchRejected() override {} void OnTouchMapAction() override {} + void OnAnimatedScaleEnded() override {} void AddUserEvent(df::TouchEvent const & event) { diff --git a/drape_frontend/frontend_renderer.cpp b/drape_frontend/frontend_renderer.cpp index 39bb090825..db52246595 100755 --- a/drape_frontend/frontend_renderer.cpp +++ b/drape_frontend/frontend_renderer.cpp @@ -1415,6 +1415,11 @@ void FrontendRenderer::OnScaleEnded() PullToBoundArea(false /* randomPlace */, false /* applyZoom */); } +void FrontendRenderer::OnAnimatedScaleEnded() +{ + PullToBoundArea(false /* randomPlace */, false /* applyZoom */); +} + void FrontendRenderer::OnAnimationStarted(ref_ptr anim) { m_myPositionController->AnimationStarted(anim); diff --git a/drape_frontend/frontend_renderer.hpp b/drape_frontend/frontend_renderer.hpp index d76a94acfc..d4adc101f2 100755 --- a/drape_frontend/frontend_renderer.hpp +++ b/drape_frontend/frontend_renderer.hpp @@ -193,6 +193,7 @@ private: void CorrectScalePoint(m2::PointD & pt1, m2::PointD & pt2) const override; void CorrectGlobalScalePoint(m2::PointD & pt) const override; void OnScaleEnded() override; + void OnAnimatedScaleEnded() override; void OnAnimationStarted(ref_ptr anim) override; void OnPerspectiveSwitchRejected() override; void OnTouchMapAction() override; diff --git a/drape_frontend/user_event_stream.cpp b/drape_frontend/user_event_stream.cpp index 17145bf326..a94055a9e8 100644 --- a/drape_frontend/user_event_stream.cpp +++ b/drape_frontend/user_event_stream.cpp @@ -376,6 +376,11 @@ bool UserEventStream::SetScale(m2::PointD const & pxScaleCenter, double factor, auto anim = make_unique_dp(startScreen.GetScale(), endScreen.GetScale(), glbScaleCenter, offset); anim->SetMaxDuration(kMaxAnimationTimeSec); + anim->SetOnFinishAction([this](ref_ptr animation) + { + if (m_listener) + m_listener->OnAnimatedScaleEnded(); + }); // Reset follow animation with scaling if we apply scale explicitly. auto const & followAnim = m_animationSystem.FindAnimation(Animation::MapFollow); @@ -388,6 +393,8 @@ bool UserEventStream::SetScale(m2::PointD const & pxScaleCenter, double factor, ResetMapPlaneAnimations(); m_navigator.Scale(scaleCenter, factor); + if (m_listener) + m_listener->OnAnimatedScaleEnded(); return true; } diff --git a/drape_frontend/user_event_stream.hpp b/drape_frontend/user_event_stream.hpp index cc93262563..7cdf881ea7 100644 --- a/drape_frontend/user_event_stream.hpp +++ b/drape_frontend/user_event_stream.hpp @@ -256,6 +256,7 @@ public: virtual void CorrectGlobalScalePoint(m2::PointD & pt) const = 0; virtual void CorrectScalePoint(m2::PointD & pt1, m2::PointD & pt2) const = 0; virtual void OnScaleEnded() = 0; + virtual void OnAnimatedScaleEnded() = 0; virtual void OnAnimationStarted(ref_ptr anim) = 0; virtual void OnPerspectiveSwitchRejected() = 0;