diff options
author | r.kuznetsov <r.kuznetsov@corp.mail.ru> | 2016-06-10 14:22:14 +0300 |
---|---|---|
committer | Vladimir Byko-Ianko <v.bykoianko@corp.mail.ru> | 2016-06-23 19:23:42 +0300 |
commit | ccd5ee0bd8544e8cea4f52ea31174e9c2d492397 (patch) | |
tree | 42faea72ad4eddd7ffd592c12cbd427efde26a01 /drape | |
parent | a4e1cc56e86ebeaa07a587b4ff6e3f633b21e992 (diff) |
Fixed false displacement in overlay tree
Diffstat (limited to 'drape')
-rw-r--r-- | drape/overlay_tree.cpp | 13 |
1 files changed, 8 insertions, 5 deletions
diff --git a/drape/overlay_tree.cpp b/drape/overlay_tree.cpp index c4e8b9fc05..3376218ad9 100644 --- a/drape/overlay_tree.cpp +++ b/drape/overlay_tree.cpp @@ -186,7 +186,9 @@ void OverlayTree::InsertHandle(ref_ptr<OverlayHandle> handle, // intersect with handle pixel rect ("Intersected elements"). ForEachInRect(pixelRect, [&] (ref_ptr<OverlayHandle> const & h) { - bool const isParent = (h == parentOverlay); + bool const isParent = (h == parentOverlay) || + (h->GetFeatureID() == handle->GetFeatureID() && + h->GetOverlayRank() < handle->GetOverlayRank()); if (!isParent && handle->IsIntersect(modelView, h)) rivals.push_back(h); }); @@ -313,9 +315,10 @@ void OverlayTree::EndOverlayPlacing() InsertHandle(handle, parentOverlay); } - - m_handles[rank].clear(); } + + for (int rank = 0; rank < dp::OverlayRanksCount; rank++) + m_handles[rank].clear(); for (auto const & handle : m_handlesCache) { @@ -337,10 +340,10 @@ bool OverlayTree::CheckHandle(ref_ptr<OverlayHandle> handle, int currentRank, return true; int const seachingRank = currentRank - 1; - for (auto const & h : m_handlesCache) + for (auto const & h : m_handles[seachingRank]) { if (h->GetFeatureID() == handle->GetFeatureID() && - h->GetOverlayRank() == seachingRank) + m_handlesCache.find(h) != m_handlesCache.end()) { parentOverlay = h; return true; |