diff --git a/drape_frontend/drape_engine.cpp b/drape_frontend/drape_engine.cpp index f3df0a2554..d17a2e2b30 100644 --- a/drape_frontend/drape_engine.cpp +++ b/drape_frontend/drape_engine.cpp @@ -193,16 +193,23 @@ void DrapeEngine::Move(double factorX, double factorY, bool isAnim) AddUserEvent(make_unique_dp(factorX, factorY, isAnim)); } +void DrapeEngine::Rotate(double azimuth, bool isAnim) +{ + AddUserEvent(make_unique_dp(azimuth, isAnim, nullptr /* parallelAnimCreator */)); +} + void DrapeEngine::SetModelViewCenter(m2::PointD const & centerPt, int zoom, bool isAnim, bool trackVisibleViewport) { - PostUserEvent(make_unique_dp(centerPt, zoom, isAnim, trackVisibleViewport)); + PostUserEvent(make_unique_dp(centerPt, zoom, isAnim, trackVisibleViewport, + nullptr /* parallelAnimCreator */)); } void DrapeEngine::SetModelViewRect(m2::RectD const & rect, bool applyRotation, int zoom, bool isAnim, bool useVisibleViewport) { - PostUserEvent(make_unique_dp(rect, applyRotation, zoom, isAnim, useVisibleViewport)); + PostUserEvent(make_unique_dp(rect, applyRotation, zoom, isAnim, useVisibleViewport, + nullptr /* parallelAnimCreator */ )); } void DrapeEngine::SetModelViewAnyRect(m2::AnyRectD const & rect, bool isAnim, bool useVisibleViewport) diff --git a/drape_frontend/drape_engine.hpp b/drape_frontend/drape_engine.hpp index 6391bf24b1..08ffa9986a 100644 --- a/drape_frontend/drape_engine.hpp +++ b/drape_frontend/drape_engine.hpp @@ -128,6 +128,7 @@ public: void AddTouchEvent(TouchEvent const & event); void Scale(double factor, m2::PointD const & pxPoint, bool isAnim); void Move(double factorX, double factorY, bool isAnim); + void Rotate(double azimuth, bool isAnim); // If zoom == -1 then current zoom will not be changed. void SetModelViewCenter(m2::PointD const & centerPt, int zoom, bool isAnim, 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 a6b0d08358..8c958d4669 100644 --- a/drape_frontend/drape_frontend_tests/user_event_stream_tests.cpp +++ b/drape_frontend/drape_frontend_tests/user_event_stream_tests.cpp @@ -52,8 +52,9 @@ public: void SetRect(m2::RectD const & r) { - m_stream.AddEvent(make_unique_dp(r, false /* rotate */, -1, - false /* isAnim */, false /* useVisibleViewport */)); + m_stream.AddEvent(make_unique_dp(r, false /* rotate */, -1, false /* isAnim */, + false /* useVisibleViewport */, + nullptr /* parallelAnimCreator */)); } void AddExpectation(char const * action) diff --git a/drape_frontend/frontend_renderer.cpp b/drape_frontend/frontend_renderer.cpp index c9ea5569b7..8cf4990a3b 100755 --- a/drape_frontend/frontend_renderer.cpp +++ b/drape_frontend/frontend_renderer.cpp @@ -824,8 +824,8 @@ void FrontendRenderer::AcceptMessage(ref_ptr message) int zoom = kDoNotChangeZoom; if (m_currentZoomLevel < scales::GetAddNewPlaceScale()) zoom = scales::GetAddNewPlaceScale(); - AddUserEvent(make_unique_dp(pt, zoom, true /* isAnim */, - false /* trackVisibleViewport */)); + AddUserEvent(make_unique_dp(pt, zoom, true /* isAnim */, false /* trackVisibleViewport */, + nullptr /* parallelAnimCreator */)); } } break; @@ -1274,8 +1274,8 @@ void FrontendRenderer::PullToBoundArea(bool randomPlace, bool applyZoom) int zoom = kDoNotChangeZoom; if (applyZoom && m_currentZoomLevel < scales::GetAddNewPlaceScale()) zoom = scales::GetAddNewPlaceScale(); - AddUserEvent(make_unique_dp(dest, zoom, true /* isAnim */, - false /* trackVisibleViewport */)); + AddUserEvent(make_unique_dp(dest, zoom, true /* isAnim */, false /* trackVisibleViewport */, + nullptr /* parallelAnimCreator */)); } } @@ -2423,7 +2423,7 @@ void FrontendRenderer::ChangeModelView(m2::PointD const & center, int zoomLevel, void FrontendRenderer::ChangeModelView(double azimuth, TAnimationCreator const & parallelAnimCreator) { - AddUserEvent(make_unique_dp(azimuth, parallelAnimCreator)); + AddUserEvent(make_unique_dp(azimuth, true /* isAnim */, parallelAnimCreator)); } void FrontendRenderer::ChangeModelView(m2::RectD const & rect, @@ -2558,7 +2558,7 @@ void FrontendRenderer::CheckAndRunFirstLaunchAnimation() int constexpr kDesiredZoomLevel = 13; m2::PointD const pos = m_myPositionController->GetDrawablePosition(); AddUserEvent(make_unique_dp(pos, kDesiredZoomLevel, true /* isAnim */, - false /* trackVisibleViewport */)); + false /* trackVisibleViewport */, nullptr /* parallelAnimCreator */)); } void FrontendRenderer::ScheduleOverlayCollecting() diff --git a/drape_frontend/scenario_manager.cpp b/drape_frontend/scenario_manager.cpp index 8181a6d494..2fd0bacc04 100644 --- a/drape_frontend/scenario_manager.cpp +++ b/drape_frontend/scenario_manager.cpp @@ -92,7 +92,8 @@ void ScenarioManager::ThreadRoutine() m_frontendRenderer->AddUserEvent(make_unique_dp(centerViewportAction->GetCenter(), centerViewportAction->GetZoomLevel(), true /* isAnim */, - false /* trackVisibleViewport */)); + false /* trackVisibleViewport */, + nullptr /* parallelAnimCreator */)); break; } diff --git a/drape_frontend/user_event_stream.cpp b/drape_frontend/user_event_stream.cpp index 5e8c410cb5..63a46e9b0a 100644 --- a/drape_frontend/user_event_stream.cpp +++ b/drape_frontend/user_event_stream.cpp @@ -426,7 +426,7 @@ bool UserEventStream::OnSetCenter(ref_ptr centerEvent) bool UserEventStream::OnRotate(ref_ptr rotateEvent) { - return SetAngle(rotateEvent->GetTargetAzimuth(), rotateEvent->GetParallelAnimCreator()); + return SetAngle(rotateEvent->GetTargetAzimuth(), rotateEvent->IsAnim(), rotateEvent->GetParallelAnimCreator()); } bool UserEventStream::OnNewVisibleViewport(ref_ptr viewportEvent) @@ -455,7 +455,7 @@ bool UserEventStream::OnNewVisibleViewport(ref_ptr view return false; } -bool UserEventStream::SetAngle(double azimuth, TAnimationCreator const & parallelAnimCreator) +bool UserEventStream::SetAngle(double azimuth, bool isAnim, TAnimationCreator const & parallelAnimCreator) { ScreenBase screen; GetTargetScreen(screen); @@ -466,14 +466,14 @@ bool UserEventStream::SetAngle(double azimuth, TAnimationCreator const & paralle { return SetFollowAndRotate(gPt, pt, azimuth, kDoNotChangeZoom, kDoNotAutoZoom, - true /* isAnim */, false /* isAutoScale */, + isAnim, false /* isAutoScale */, nullptr /* onFinishAction */, parallelAnimCreator); } screen.SetAngle(azimuth); screen.MatchGandP3d(gPt, pt); - return SetScreen(screen, true /* isAnim */, parallelAnimCreator); + return SetScreen(screen, isAnim, parallelAnimCreator); } bool UserEventStream::SetRect(m2::RectD rect, int zoom, bool applyRotation, bool isAnim, @@ -703,7 +703,7 @@ void UserEventStream::CheckAutoRotate() double const kMaxAutoRotateAngle = 25.0 * math::pi / 180.0; double const angle = fabs(GetCurrentScreen().GetAngle()); if (angle < kMaxAutoRotateAngle || (math::twicePi - angle) < kMaxAutoRotateAngle) - SetAngle(0.0); + SetAngle(0.0, true /* isAnim */); } bool UserEventStream::ProcessTouch(TouchEvent const & touch) diff --git a/drape_frontend/user_event_stream.hpp b/drape_frontend/user_event_stream.hpp index c133faa8a5..97751ed33a 100644 --- a/drape_frontend/user_event_stream.hpp +++ b/drape_frontend/user_event_stream.hpp @@ -161,7 +161,7 @@ class SetCenterEvent : public UserEvent public: SetCenterEvent(m2::PointD const & center, int zoom, bool isAnim, bool trackVisibleViewport, - TAnimationCreator const & parallelAnimCreator = nullptr) + TAnimationCreator const & parallelAnimCreator) : m_center(center) , m_zoom(zoom) , m_isAnim(isAnim) @@ -189,7 +189,7 @@ class SetRectEvent : public UserEvent { public: SetRectEvent(m2::RectD const & rect, bool rotate, int zoom, bool isAnim, - bool useVisibleViewport, TAnimationCreator const & parallelAnimCreator = nullptr) + bool useVisibleViewport, TAnimationCreator const & parallelAnimCreator) : m_rect(rect) , m_applyRotation(rotate) , m_zoom(zoom) @@ -314,18 +314,21 @@ private: class RotateEvent : public UserEvent { public: - explicit RotateEvent(double targetAzimut, TAnimationCreator const & parallelAnimCreator = nullptr) - : m_targetAzimut(targetAzimut) + explicit RotateEvent(double targetAzimuth, bool isAnim, TAnimationCreator const & parallelAnimCreator) + : m_targetAzimuth(targetAzimuth) + , m_isAnim(isAnim) , m_parallelAnimCreator(parallelAnimCreator) {} EventType GetType() const override { return UserEvent::EventType::Rotate; } - double GetTargetAzimuth() const { return m_targetAzimut; } + bool IsAnim() const { return m_isAnim; } + double GetTargetAzimuth() const { return m_targetAzimuth; } TAnimationCreator const & GetParallelAnimCreator() const { return m_parallelAnimCreator; } private: - double m_targetAzimut; + double m_targetAzimuth; + bool m_isAnim; TAnimationCreator m_parallelAnimCreator; }; @@ -437,7 +440,7 @@ private: bool OnRotate(ref_ptr rotateEvent); bool OnNewVisibleViewport(ref_ptr viewportEvent); - bool SetAngle(double azimuth, TAnimationCreator const & parallelAnimCreator = nullptr); + bool SetAngle(double azimuth, bool isAnim, TAnimationCreator const & parallelAnimCreator = nullptr); bool SetRect(m2::RectD rect, int zoom, bool applyRotation, bool isAnim, bool useVisibleViewport, TAnimationCreator const & parallelAnimCreator = nullptr); bool SetRect(m2::AnyRectD const & rect, bool isAnim, bool fitInViewport, diff --git a/map/framework.cpp b/map/framework.cpp index edf2a7cfa5..f1cdd20fcc 100644 --- a/map/framework.cpp +++ b/map/framework.cpp @@ -1320,6 +1320,12 @@ void Framework::Move(double factorX, double factorY, bool isAnim) m_drapeEngine->Move(factorX, factorY, isAnim); } +void Framework::Rotate(double azimuth, bool isAnim) +{ + if (m_drapeEngine != nullptr) + m_drapeEngine->Rotate(azimuth, isAnim); +} + void Framework::TouchEvent(df::TouchEvent const & touch) { if (m_drapeEngine != nullptr) diff --git a/map/framework.hpp b/map/framework.hpp index 4d8deeb750..5830ef68a5 100644 --- a/map/framework.hpp +++ b/map/framework.hpp @@ -672,6 +672,8 @@ public: /// factorY = 1.5 moves the map one and a half size up. void Move(double factorX, double factorY, bool isAnim); + void Rotate(double azimuth, bool isAnim); + void TouchEvent(df::TouchEvent const & touch); //@}