Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mapsme/omim.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/drape
diff options
context:
space:
mode:
authorr.kuznetsov <r.kuznetsov@corp.mail.ru>2016-06-10 14:22:14 +0300
committerVladimir Byko-Ianko <v.bykoianko@corp.mail.ru>2016-06-23 19:23:42 +0300
commitccd5ee0bd8544e8cea4f52ea31174e9c2d492397 (patch)
tree42faea72ad4eddd7ffd592c12cbd427efde26a01 /drape
parenta4e1cc56e86ebeaa07a587b4ff6e3f633b21e992 (diff)
Fixed false displacement in overlay tree
Diffstat (limited to 'drape')
-rw-r--r--drape/overlay_tree.cpp13
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;