diff --git a/drape_frontend/frontend_renderer.cpp b/drape_frontend/frontend_renderer.cpp index df368d6533..4195c7cbdd 100755 --- a/drape_frontend/frontend_renderer.cpp +++ b/drape_frontend/frontend_renderer.cpp @@ -1490,8 +1490,8 @@ void FrontendRenderer::RenderScene(ScreenBase const & modelView, bool activeFram RenderUserMarksLayer(modelView, DepthLayer::RoutingBottomMarkLayer); RenderUserMarksLayer(modelView, DepthLayer::RoutingMarkLayer); RenderUserMarksLayer(modelView, DepthLayer::GuidesBottomMarkLayer); - RenderSearchMarksLayer(modelView, DepthLayer::GuidesMarkLayer); - RenderSearchMarksLayer(modelView, DepthLayer::SearchMarkLayer); + RenderNonDisplacedUserMarksLayer(modelView, DepthLayer::GuidesMarkLayer); + RenderNonDisplacedUserMarksLayer(modelView, DepthLayer::SearchMarkLayer); } if (!HasRouteData()) @@ -1686,7 +1686,8 @@ void FrontendRenderer::RenderUserMarksLayer(ScreenBase const & modelView, DepthL RenderSingleGroup(m_context, modelView, make_ref(group)); } -void FrontendRenderer::RenderSearchMarksLayer(ScreenBase const & modelView, DepthLayer layerId) +void FrontendRenderer::RenderNonDisplacedUserMarksLayer(ScreenBase const & modelView, + DepthLayer layerId) { auto & layer = m_layers[static_cast(layerId)]; layer.Sort(nullptr); diff --git a/drape_frontend/frontend_renderer.hpp b/drape_frontend/frontend_renderer.hpp index 3d2f6464c2..c4228410d2 100755 --- a/drape_frontend/frontend_renderer.hpp +++ b/drape_frontend/frontend_renderer.hpp @@ -183,10 +183,10 @@ private: void RenderOverlayLayer(ScreenBase const & modelView); void RenderNavigationOverlayLayer(ScreenBase const & modelView); void RenderUserMarksLayer(ScreenBase const & modelView, DepthLayer layerId); + void RenderNonDisplacedUserMarksLayer(ScreenBase const & modelView, DepthLayer layerId); void RenderTransitSchemeLayer(ScreenBase const & modelView); void RenderTrafficLayer(ScreenBase const & modelView); void RenderRouteLayer(ScreenBase const & modelView); - void RenderSearchMarksLayer(ScreenBase const & modelView, DepthLayer layerId); void RenderTransitBackground(); void RenderEmptyFrame(); diff --git a/map/guides_manager.cpp b/map/guides_manager.cpp index 091080ff8c..76b36e92a7 100644 --- a/map/guides_manager.cpp +++ b/map/guides_manager.cpp @@ -26,6 +26,24 @@ auto constexpr kScaleEps = 0.1115; auto constexpr kMinViewportsIntersectionScore = 0.9; auto constexpr kRequestingRectSidesIncrease = 0.3; + +std::vector> SortGuidesByPositions( + std::vector const & guides, ScreenBase const & screen) +{ + std::vector> sortedGuides; + sortedGuides.reserve(guides.size()); + for (size_t i = 0; i < guides.size(); ++i) + sortedGuides.emplace_back(screen.GtoP(guides[i].m_point), i); + + std::sort(sortedGuides.begin(), sortedGuides.end(), + [](auto const & lhs, auto const & rhs) + { + if (base::AlmostEqualAbs(lhs.first.y, rhs.first.y, 1e-2)) + return lhs.first.x < rhs.first.x; + return lhs.first.y < rhs.first.y; + }); + return sortedGuides; +} } // namespace GuidesManager::GuidesManager(CloseGalleryFn && closeGalleryFn) @@ -339,20 +357,10 @@ void GuidesManager::UpdateGuidesMarks() es.ClearGroup(UserMark::GUIDE_CLUSTER); es.ClearGroup(UserMark::GUIDE); - std::vector> sortedGuides; - sortedGuides.reserve(m_guides.m_nodes.size()); - for (size_t i = 0; i < m_guides.m_nodes.size(); ++i) - sortedGuides.emplace_back(m_screen.GtoP(m_guides.m_nodes[i].m_point), i); - std::sort(sortedGuides.begin(), sortedGuides.end(), - [](std::pair const & lhs, std::pair const & rhs) - { - if (base::AlmostEqualAbs(lhs.first.y, rhs.first.y, 1e-2)) - return lhs.first.x < rhs.first.x; - return lhs.first.y < rhs.first.y; - }); + auto const sortedGuides = SortGuidesByPositions(m_guides.m_nodes, m_screen); float depth = 0.0f; - for (auto & guidePos : sortedGuides) + for (auto const & guidePos : sortedGuides) { auto const & guide = m_guides.m_nodes[guidePos.second]; if (guide.m_sightsCount + guide.m_outdoorCount > 1)