diff options
author | Daria Volvenkova <d.volvenkova@corp.mail.ru> | 2018-07-04 14:00:25 +0300 |
---|---|---|
committer | Vlad Mihaylenko <vxmihaylenko@gmail.com> | 2018-07-20 14:51:41 +0300 |
commit | 00da2f0826c5ef90dc72f9874d05d0b46ebb27f5 (patch) | |
tree | 16783bdaf6cac5f9353ca359ed7b73954daf55e7 /drape | |
parent | c3191975331f85d0789f7037f280303bce48becb (diff) |
Check min visible scale of overlays when build the overlay tree.
Diffstat (limited to 'drape')
-rw-r--r-- | drape/overlay_handle.cpp | 12 | ||||
-rw-r--r-- | drape/overlay_handle.hpp | 6 | ||||
-rw-r--r-- | drape/overlay_tree.cpp | 7 | ||||
-rw-r--r-- | drape/overlay_tree.hpp | 3 |
4 files changed, 21 insertions, 7 deletions
diff --git a/drape/overlay_handle.cpp b/drape/overlay_handle.cpp index d6a6e6a4e7..511bb70b2b 100644 --- a/drape/overlay_handle.cpp +++ b/drape/overlay_handle.cpp @@ -28,13 +28,14 @@ private: }; OverlayHandle::OverlayHandle(OverlayID const & id, dp::Anchor anchor, - uint64_t priority, bool isBillboard) + uint64_t priority, int minVisibleScale, bool isBillboard) : m_id(id) , m_anchor(anchor) , m_priority(priority) , m_overlayRank(OverlayRank0) , m_extendingSize(0.0) , m_pivotZ(0.0) + , m_minVisibleScale(minVisibleScale) , m_isBillboard(isBillboard) , m_isVisible(false) , m_enableCaching(false) @@ -59,6 +60,11 @@ void OverlayHandle::SetIsVisible(bool isVisible) m_isVisible = isVisible; } +int OverlayHandle::GetMinVisibleScale() const +{ + return m_minVisibleScale; +} + bool OverlayHandle::IsBillboard() const { return m_isBillboard; @@ -204,8 +210,8 @@ m2::RectD OverlayHandle::GetPixelRectPerspective(ScreenBase const & screen) cons SquareHandle::SquareHandle(OverlayID const & id, dp::Anchor anchor, m2::PointD const & gbPivot, m2::PointD const & pxSize, m2::PointD const & pxOffset, uint64_t priority, bool isBound, std::string const & debugStr, - bool isBillboard) - : TBase(id, anchor, priority, isBillboard) + int minVisibleScale, bool isBillboard) + : TBase(id, anchor, priority, minVisibleScale, isBillboard) , m_pxHalfSize(pxSize.x / 2.0, pxSize.y / 2.0) , m_gbPivot(gbPivot) , m_pxOffset(pxOffset) diff --git a/drape/overlay_handle.hpp b/drape/overlay_handle.hpp index 9ca30199b8..66462f2724 100644 --- a/drape/overlay_handle.hpp +++ b/drape/overlay_handle.hpp @@ -92,13 +92,14 @@ public: using Rects = std::vector<m2::RectF>; OverlayHandle(OverlayID const & id, dp::Anchor anchor, - uint64_t priority, bool isBillboard); + uint64_t priority, int minVisibleScale, bool isBillboard); virtual ~OverlayHandle() {} bool IsVisible() const; void SetIsVisible(bool isVisible); + int GetMinVisibleScale() const; bool IsBillboard() const; virtual m2::PointD GetPivot(ScreenBase const & screen, bool perspective) const; @@ -171,6 +172,7 @@ protected: m2::RectD GetPixelRectPerspective(ScreenBase const & screen) const; private: + int m_minVisibleScale; bool const m_isBillboard; bool m_isVisible; @@ -206,7 +208,7 @@ public: SquareHandle(OverlayID const & id, dp::Anchor anchor, m2::PointD const & gbPivot, m2::PointD const & pxSize, m2::PointD const & pxOffset, uint64_t priority, bool isBound, std::string const & debugStr, - bool isBillboard = false); + int minVisibleScale, bool isBillboard); m2::RectD GetPixelRect(ScreenBase const & screen, bool perspective) const override; void GetPixelShape(ScreenBase const & screen, bool perspective, Rects & rects) const override; diff --git a/drape/overlay_tree.cpp b/drape/overlay_tree.cpp index 43cba0a10c..32cc336554 100644 --- a/drape/overlay_tree.cpp +++ b/drape/overlay_tree.cpp @@ -115,13 +115,14 @@ bool OverlayTree::IsNeedUpdate() const return m_frameCounter == kInvalidFrame; } -void OverlayTree::StartOverlayPlacing(ScreenBase const & screen) +void OverlayTree::StartOverlayPlacing(ScreenBase const & screen, int zoomLevel) { ASSERT(IsNeedUpdate(), ()); TBase::Clear(); m_handlesCache.clear(); m_traits.SetModelView(screen); m_displacementInfo.clear(); + m_zoomLevel = zoomLevel; } void OverlayTree::Remove(ref_ptr<OverlayHandle> handle) @@ -140,6 +141,10 @@ void OverlayTree::Add(ref_ptr<OverlayHandle> handle) ScreenBase const & modelView = GetModelView(); handle->SetIsVisible(false); + + if (m_zoomLevel < handle->GetMinVisibleScale()) + return; + handle->SetCachingEnable(true); // Skip duplicates. diff --git a/drape/overlay_tree.hpp b/drape/overlay_tree.hpp index 91a9887a1a..2d94bfd7b6 100644 --- a/drape/overlay_tree.hpp +++ b/drape/overlay_tree.hpp @@ -64,7 +64,7 @@ public: bool Frame(); bool IsNeedUpdate() const; - void StartOverlayPlacing(ScreenBase const & screen); + void StartOverlayPlacing(ScreenBase const & screen, int zoomLevel); void Add(ref_ptr<OverlayHandle> handle); void Remove(ref_ptr<OverlayHandle> handle); void EndOverlayPlacing(); @@ -117,5 +117,6 @@ private: HandlesCache m_displacers; uint32_t m_frameUpdatePeriod; + int m_zoomLevel = 1; }; } // namespace dp |