forked from organicmaps/organicmaps
Refactor switch from perspective when zoom level is too low.
Conflicts: drape_frontend/frontend_renderer.hpp
This commit is contained in:
parent
c2db00a999
commit
1d08ec2bd3
3 changed files with 42 additions and 28 deletions
|
@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Add table
Reference in a new issue