diff options
author | Daria Volvenkova <d.volvenkova@corp.mail.ru> | 2016-06-21 17:07:46 +0300 |
---|---|---|
committer | Vladimir Byko-Ianko <v.bykoianko@corp.mail.ru> | 2016-06-24 16:02:06 +0300 |
commit | 6d433ff0cafe85066601bea7dd7b82400d71a51a (patch) | |
tree | 472152f737314f702eb89a9826e60fe0cb3e4e00 /drape | |
parent | 99ebfac3a1a4e7a0bd77e5c155f62fb9545732bb (diff) |
Selected feature's overlays can't be displaced.
Diffstat (limited to 'drape')
-rw-r--r-- | drape/overlay_tree.cpp | 94 | ||||
-rw-r--r-- | drape/overlay_tree.hpp | 4 |
2 files changed, 56 insertions, 42 deletions
diff --git a/drape/overlay_tree.cpp b/drape/overlay_tree.cpp index 3376218ad9..84a31866f5 100644 --- a/drape/overlay_tree.cpp +++ b/drape/overlay_tree.cpp @@ -199,48 +199,53 @@ void OverlayTree::InsertHandle(ref_ptr<OverlayHandle> handle, if (boundToParent) handleToCompare = parentOverlay; - // In this loop we decide which element must be visible. - // If input element "handle" more priority than all "Intersected elements" - // than we remove all "Intersected elements" and insert input element "handle". - // But if some of already inserted elements more priority than we don't insert "handle". - for (auto const & rivalHandle : rivals) + bool const selected = m_selectedFeatureID.IsValid() && (handleToCompare->GetFeatureID() == m_selectedFeatureID); + + if (!selected) { - bool rejectByDepth = false; - if (modelView.isPerspective()) + // In this loop we decide which element must be visible. + // If input element "handle" has more priority than all "Intersected elements", + // then we remove all "Intersected elements" and insert input element "handle". + // But if some of already inserted elements have more priority, then we don't insert "handle". + for (auto const & rivalHandle : rivals) { - bool const pathTextComparation = handle->HasDynamicAttributes() || rivalHandle->HasDynamicAttributes(); - rejectByDepth = !pathTextComparation && - handleToCompare->GetPivot(modelView, true).y > rivalHandle->GetPivot(modelView, true).y; - } + bool rejectByDepth = false; + if (modelView.isPerspective()) + { + bool const pathTextComparation = handle->HasDynamicAttributes() || rivalHandle->HasDynamicAttributes(); + rejectByDepth = !pathTextComparation && + handleToCompare->GetPivot(modelView, true).y > rivalHandle->GetPivot(modelView, true).y; + } - if (rejectByDepth || comparator.IsGreater(rivalHandle, handleToCompare)) - { - // Handle is displaced and bound to its parent, parent will be displaced too. - if (boundToParent) + if (rejectByDepth || comparator.IsGreater(rivalHandle, handleToCompare)) { - DeleteHandle(parentOverlay); + // Handle is displaced and bound to its parent, parent will be displaced too. + if (boundToParent) + { + DeleteHandle(parentOverlay); - #ifdef DEBUG_OVERLAYS_OUTPUT - LOG(LINFO, ("Displace (0):", handle->GetOverlayDebugInfo(), "->", parentOverlay->GetOverlayDebugInfo())); - #endif +#ifdef DEBUG_OVERLAYS_OUTPUT + LOG(LINFO, ("Displace (0):", handle->GetOverlayDebugInfo(), "->", parentOverlay->GetOverlayDebugInfo())); +#endif - #ifdef COLLECT_DISPLACEMENT_INFO - m_displacementInfo.emplace_back(DisplacementData(handle->GetExtendedPixelRect(modelView).Center(), - parentOverlay->GetExtendedPixelRect(modelView).Center(), - dp::Color(0, 255, 0, 255))); - #endif - } +#ifdef COLLECT_DISPLACEMENT_INFO + m_displacementInfo.emplace_back(DisplacementData(handle->GetExtendedPixelRect(modelView).Center(), + parentOverlay->GetExtendedPixelRect(modelView).Center(), + dp::Color(0, 255, 0, 255))); +#endif + } - #ifdef DEBUG_OVERLAYS_OUTPUT - LOG(LINFO, ("Displace (1):", rivalHandle->GetOverlayDebugInfo(), "->", handle->GetOverlayDebugInfo())); - #endif +#ifdef DEBUG_OVERLAYS_OUTPUT + LOG(LINFO, ("Displace (1):", rivalHandle->GetOverlayDebugInfo(), "->", handle->GetOverlayDebugInfo())); +#endif - #ifdef COLLECT_DISPLACEMENT_INFO - m_displacementInfo.emplace_back(DisplacementData(rivalHandle->GetExtendedPixelRect(modelView).Center(), - handle->GetExtendedPixelRect(modelView).Center(), - dp::Color(0, 0, 255, 255))); - #endif - return; +#ifdef COLLECT_DISPLACEMENT_INFO + m_displacementInfo.emplace_back(DisplacementData(rivalHandle->GetExtendedPixelRect(modelView).Center(), + handle->GetExtendedPixelRect(modelView).Center(), + dp::Color(0, 0, 255, 255))); +#endif + return; + } } } @@ -256,15 +261,15 @@ void OverlayTree::InsertHandle(ref_ptr<OverlayHandle> handle, { Erase(*it); - #ifdef DEBUG_OVERLAYS_OUTPUT +#ifdef DEBUG_OVERLAYS_OUTPUT LOG(LINFO, ("Displace (2):", handle->GetOverlayDebugInfo(), "->", (*it)->GetOverlayDebugInfo())); - #endif +#endif - #ifdef COLLECT_DISPLACEMENT_INFO +#ifdef COLLECT_DISPLACEMENT_INFO m_displacementInfo.emplace_back(DisplacementData(handle->GetExtendedPixelRect(modelView).Center(), (*it)->GetExtendedPixelRect(modelView).Center(), dp::Color(0, 0, 255, 255))); - #endif +#endif it = m_handlesCache.erase(it); } @@ -278,15 +283,15 @@ void OverlayTree::InsertHandle(ref_ptr<OverlayHandle> handle, { DeleteHandle(rivalHandle); - #ifdef DEBUG_OVERLAYS_OUTPUT +#ifdef DEBUG_OVERLAYS_OUTPUT LOG(LINFO, ("Displace (3):", handle->GetOverlayDebugInfo(), "->", rivalHandle->GetOverlayDebugInfo())); - #endif +#endif - #ifdef COLLECT_DISPLACEMENT_INFO +#ifdef COLLECT_DISPLACEMENT_INFO m_displacementInfo.emplace_back(DisplacementData(handle->GetExtendedPixelRect(modelView).Center(), rivalHandle->GetExtendedPixelRect(modelView).Center(), dp::Color(0, 0, 255, 255))); - #endif +#endif } } @@ -415,6 +420,11 @@ void OverlayTree::SetDisplacementMode(int displacementMode) m_frameCounter = kInvalidFrame; } +void OverlayTree::SetSelectedFeature(FeatureID const & featureID) +{ + m_selectedFeatureID = featureID; +} + #ifdef COLLECT_DISPLACEMENT_INFO OverlayTree::TDisplacementInfo const & OverlayTree::GetDisplacementInfo() const diff --git a/drape/overlay_tree.hpp b/drape/overlay_tree.hpp index bf13ae88b5..8a65e18afb 100644 --- a/drape/overlay_tree.hpp +++ b/drape/overlay_tree.hpp @@ -65,6 +65,8 @@ public: void SetDisplacementEnabled(bool enabled); void SetDisplacementMode(int displacementMode); + void SetSelectedFeature(FeatureID const & featureID); + #ifdef COLLECT_DISPLACEMENT_INFO struct DisplacementData { @@ -95,6 +97,8 @@ private: bool m_isDisplacementEnabled; int m_displacementMode; + FeatureID m_selectedFeatureID; + #ifdef COLLECT_DISPLACEMENT_INFO TDisplacementInfo m_displacementInfo; #endif |