Refactor switch from perspective when zoom level is too low.

Conflicts:
	drape_frontend/frontend_renderer.hpp
This commit is contained in:
Daria Volvenkova 2015-11-25 17:52:35 +03:00
parent c2db00a999
commit 1d08ec2bd3
3 changed files with 42 additions and 28 deletions

View file

@ -386,11 +386,7 @@ void FrontendRenderer::AcceptMessage(ref_ptr<Message> message)
{
m_myPositionController->DeactivateRouting();
if (m_enable3dInNavigation)
{
m_discardedFOV = -1.0;
m_discardedAngle = -1.0;
AddUserEvent(DisablePerspectiveEvent());
}
DiscardPerspective();
}
break;
}
@ -410,11 +406,7 @@ void FrontendRenderer::AcceptMessage(ref_ptr<Message> message)
{
m_myPositionController->DeactivateRouting();
if (m_enable3dInNavigation)
{
m_discardedFOV = -1.0;
m_discardedAngle = -1.0;
AddUserEvent(DisablePerspectiveEvent());
}
DiscardPerspective();
break;
}
@ -909,26 +901,44 @@ int FrontendRenderer::GetCurrentZoomLevelForData() const
return (m_currentZoomLevel <= upperScale ? m_currentZoomLevel : upperScale);
}
void FrontendRenderer::DiscardPerspective(ScreenBase const & screen)
{
if (!screen.isPerspective())
return;
m_discardedFOV = screen.GetAngleFOV();
m_discardedAngle = screen.GetRotationAngle();
AddUserEvent(DisablePerspectiveEvent());
}
void FrontendRenderer::DiscardPerspective()
{
m_discardedFOV = 0.0;
m_discardedAngle = 0.0;
AddUserEvent(DisablePerspectiveEvent());
}
void FrontendRenderer::RecoverPerspective()
{
if (m_discardedFOV <= 0.0)
return;
AddUserEvent(EnablePerspectiveEvent(m_discardedAngle, m_discardedFOV,
true /* animated */, true /* immediately start */));
m_discardedFOV = 0.0;
m_discardedAngle = 0.0;
}
void FrontendRenderer::ResolveZoomLevel(ScreenBase const & screen)
{
m_currentZoomLevel = GetDrawTileScale(screen);
if (m_userEventStream.IsInPerspectiveAnimation())
return;
LOG(LWARNING, ("m_currentZoomLevel =", m_currentZoomLevel));
if (screen.isPerspective() && m_currentZoomLevel < m_min3dZoomLevel)
if (m_enable3dInNavigation && !m_userEventStream.IsInPerspectiveAnimation())
{
m_discardedFOV = screen.GetAngleFOV();
m_discardedAngle = screen.GetRotationAngle();
AddUserEvent(DisablePerspectiveEvent());
}
else if (m_discardedFOV > 0.0 &&
m_currentZoomLevel >= m_min3dZoomLevel)
{
AddUserEvent(EnablePerspectiveEvent(m_discardedAngle, m_discardedFOV,
true /* animated */, true /* immediately start */));
m_discardedFOV = -1.0;
m_discardedAngle = -1.0;
if (m_currentZoomLevel < m_min3dZoomLevel)
DiscardPerspective(screen);
else
RecoverPerspective();
}
}

View file

@ -153,6 +153,10 @@ private:
int GetCurrentZoomLevelForData() const;
void ResolveZoomLevel(ScreenBase const & screen);
void DiscardPerspective(ScreenBase const & screen);
void DiscardPerspective();
void RecoverPerspective();
void OnTap(m2::PointD const & pt, bool isLong) override;
void OnForceTap(m2::PointD const & pt) override;
void OnDoubleTap(m2::PointD const & pt) override;
@ -240,8 +244,8 @@ private:
unique_ptr<TileTree> m_tileTree;
int m_currentZoomLevel = -1;
int m_min3dZoomLevel = 17;
double m_discardedFOV = -1.0;
double m_discardedAngle = -1.0;
double m_discardedFOV = 0.0;
double m_discardedAngle = 0.0;
ref_ptr<RequestedTiles> m_requestedTiles;
uint64_t m_maxGeneration;

View file

@ -161,7 +161,7 @@ ScreenBase const & UserEventStream::ProcessEvents(bool & modelViewChange, bool &
case UserEvent::EVENT_SET_RECT:
if (m_perspectiveAnimation != nullptr)
{
//m_pendingEvent.reset(new UserEvent(e.m_rectEvent));
m_pendingEvent.reset(new UserEvent(e.m_rectEvent));
break;
}
breakAnim = SetRect(e.m_rectEvent.m_rect, e.m_rectEvent.m_zoom, e.m_rectEvent.m_applyRotation, e.m_rectEvent.m_isAnim);