diff --git a/map/location_state.cpp b/map/location_state.cpp index 0a5a1b17ad..d84715d77d 100644 --- a/map/location_state.cpp +++ b/map/location_state.cpp @@ -306,7 +306,9 @@ void State::StartRouteFollow() void State::StopRoutingMode() { - SetModeInfo(ExcludeModeBit(m_modeInfo, RoutingSessionBit)); + SetModeInfo(ChangeMode(ExcludeModeBit(m_modeInfo, RoutingSessionBit), Follow)); + RotateOnNorth(); + AnimateFollow(); } void State::TurnOff() @@ -783,7 +785,7 @@ void State::AnimateStateTransition(Mode oldMode, Mode newMode) } else if (oldMode == RotateAndFollow && newMode == UnknownPosition) { - m_framework->GetAnimator().RotateScreen(GetModelView().GetAngle(), 0.0); + RotateOnNorth(); } AnimateFollow(); @@ -801,6 +803,11 @@ void State::AnimateFollow() } } +void State::RotateOnNorth() +{ + m_framework->GetAnimator().RotateScreen(GetModelView().GetAngle(), 0.0); +} + void State::Assign(location::GpsInfo const & info) { m2::RectD rect = MercatorBounds::MetresToXY(info.m_longitude, diff --git a/map/location_state.hpp b/map/location_state.hpp index c57f75d653..3d2ec853f2 100644 --- a/map/location_state.hpp +++ b/map/location_state.hpp @@ -115,6 +115,8 @@ namespace location void AnimateStateTransition(Mode oldMode, Mode newMode); void AnimateFollow(); + void RotateOnNorth(); + void CallPositionChangedListeners(m2::PointD const & pt); void CallStateModeListeners();