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>2015-12-10 11:32:23 +0300
committerDaria Volvenkova <d.volvenkova@corp.mail.ru>2015-12-29 16:42:30 +0300
commit046e8f6b0fc5eb8748fc66900439ad227279fb3d (patch)
tree8c5a7689487d9c645aee9bcb4b7e8fd9c22dc419 /drape
parent6ec7a266da15fe582065c4a0c995686125d24dea (diff)
Added special priority for path text overlays in following mode
Diffstat (limited to 'drape')
-rw-r--r--drape/overlay_handle.cpp5
-rw-r--r--drape/overlay_handle.hpp1
-rw-r--r--drape/overlay_tree.cpp21
-rw-r--r--drape/overlay_tree.hpp3
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