diff options
author | r.kuznetsov <r.kuznetsov@corp.mail.ru> | 2015-12-10 11:32:23 +0300 |
---|---|---|
committer | Daria Volvenkova <d.volvenkova@corp.mail.ru> | 2015-12-29 16:42:30 +0300 |
commit | 046e8f6b0fc5eb8748fc66900439ad227279fb3d (patch) | |
tree | 8c5a7689487d9c645aee9bcb4b7e8fd9c22dc419 /drape | |
parent | 6ec7a266da15fe582065c4a0c995686125d24dea (diff) |
Added special priority for path text overlays in following mode
Diffstat (limited to 'drape')
-rw-r--r-- | drape/overlay_handle.cpp | 5 | ||||
-rw-r--r-- | drape/overlay_handle.hpp | 1 | ||||
-rw-r--r-- | drape/overlay_tree.cpp | 21 | ||||
-rw-r--r-- | drape/overlay_tree.hpp | 3 |
4 files changed, 26 insertions, 4 deletions
diff --git a/drape/overlay_handle.cpp b/drape/overlay_handle.cpp index 9aae8c3a6b..fae2487c67 100644 --- a/drape/overlay_handle.cpp +++ b/drape/overlay_handle.cpp @@ -193,6 +193,11 @@ bool OverlayHandle::IsMinVisibilityTimeUp() const return t > kMinVisibilityTimeMs; } +uint64_t OverlayHandle::GetPriorityInFollowingMode() const +{ + return GetPriority(); +} + SquareHandle::SquareHandle(FeatureID const & id, dp::Anchor anchor, m2::PointD const & gbPivot, m2::PointD const & pxSize, diff --git a/drape/overlay_handle.hpp b/drape/overlay_handle.hpp index dde756fc16..8cfda56e3e 100644 --- a/drape/overlay_handle.hpp +++ b/drape/overlay_handle.hpp @@ -78,6 +78,7 @@ public: uint64_t const & GetPriority() const; virtual uint64_t GetPriorityMask() const { return kPriorityMaskAll; } + virtual uint64_t GetPriorityInFollowingMode() const; virtual bool IsBound() const { return false; } diff --git a/drape/overlay_tree.cpp b/drape/overlay_tree.cpp index beeddddb0e..e720c10225 100644 --- a/drape/overlay_tree.cpp +++ b/drape/overlay_tree.cpp @@ -18,6 +18,8 @@ namespace class HandleComparator { public: + HandleComparator(bool followingMode) : m_followingMode(followingMode) {} + bool operator()(ref_ptr<OverlayHandle> const & l, ref_ptr<OverlayHandle> const & r) const { return IsGreater(l, r); @@ -26,8 +28,10 @@ public: bool IsGreater(ref_ptr<OverlayHandle> const & l, ref_ptr<OverlayHandle> const & r) const { uint64_t const mask = l->GetPriorityMask() & r->GetPriorityMask(); - uint64_t const priorityLeft = l->GetPriority() & mask; - uint64_t const priorityRight = r->GetPriority() & mask; + uint64_t const priorityLeft = (m_followingMode ? l->GetPriorityInFollowingMode() : + l->GetPriority()) & mask; + uint64_t const priorityRight = (m_followingMode ? r->GetPriorityInFollowingMode() : + r->GetPriority()) & mask; if (priorityLeft > priorityRight) return true; @@ -44,12 +48,16 @@ public: return false; } + +private: + bool m_followingMode; }; } // namespace OverlayTree::OverlayTree() : m_frameCounter(-1) + , m_followingMode(false) { for (size_t i = 0; i < m_handles.size(); i++) m_handles[i].reserve(kAverageHandlesCount[i]); @@ -145,7 +153,7 @@ void OverlayTree::InsertHandle(ref_ptr<OverlayHandle> handle, // 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". - HandleComparator comparator; + HandleComparator comparator(m_followingMode); for (auto const & info : elements) { bool const rejectByDepth = is3dMode ? posY > info.m_handle->GetPivot(modelView, is3dMode).y : false; @@ -176,7 +184,7 @@ void OverlayTree::EndOverlayPlacing() { ASSERT(IsNeedUpdate(), ()); - HandleComparator comparator; + HandleComparator comparator(m_followingMode); for (int rank = 0; rank < dp::OverlayRanksCount; rank++) { @@ -263,4 +271,9 @@ void OverlayTree::Select(m2::RectD const & rect, TSelectResult & result) const }); } +void OverlayTree::SetFollowingMode(bool mode) +{ + m_followingMode = mode; +} + } // namespace dp diff --git a/drape/overlay_tree.hpp b/drape/overlay_tree.hpp index b65457f1cc..07f385a46b 100644 --- a/drape/overlay_tree.hpp +++ b/drape/overlay_tree.hpp @@ -61,6 +61,8 @@ public: using TSelectResult = buffer_vector<ref_ptr<OverlayHandle>, 8>; void Select(m2::RectD const & rect, TSelectResult & result) const; + void SetFollowingMode(bool mode); + private: ScreenBase const & GetModelView() const { return m_traits.m_modelView; } void InsertHandle(ref_ptr<OverlayHandle> handle, @@ -72,6 +74,7 @@ private: int m_frameCounter; array<vector<ref_ptr<OverlayHandle>>, dp::OverlayRanksCount> m_handles; vector<detail::OverlayInfo> m_handlesToDelete; + bool m_followingMode; }; } // namespace dp |