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:
authorDaria Volvenkova <d.volvenkova@corp.mail.ru>2018-07-04 14:00:25 +0300
committerVlad Mihaylenko <vxmihaylenko@gmail.com>2018-07-20 14:51:41 +0300
commit00da2f0826c5ef90dc72f9874d05d0b46ebb27f5 (patch)
tree16783bdaf6cac5f9353ca359ed7b73954daf55e7 /drape
parentc3191975331f85d0789f7037f280303bce48becb (diff)
Check min visible scale of overlays when build the overlay tree.
Diffstat (limited to 'drape')
-rw-r--r--drape/overlay_handle.cpp12
-rw-r--r--drape/overlay_handle.hpp6
-rw-r--r--drape/overlay_tree.cpp7
-rw-r--r--drape/overlay_tree.hpp3
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