diff options
author | r.kuznetsov <r.kuznetsov@corp.mail.ru> | 2016-01-29 14:06:10 +0300 |
---|---|---|
committer | Sergey Yershov <yershov@corp.mail.ru> | 2016-03-23 16:20:41 +0300 |
commit | f4de5841f7bbfa1773ecd824d366a8bea49515a9 (patch) | |
tree | 16ee18c3f36b549e15fbf25c3e2cdfb2b5628b00 /drape/overlay_tree.hpp | |
parent | 2317f55b5a9460654f0916f6b85d7fa23837d3be (diff) |
Improved displacement algorithm and overlays rendering
Diffstat (limited to 'drape/overlay_tree.hpp')
-rw-r--r-- | drape/overlay_tree.hpp | 38 |
1 files changed, 12 insertions, 26 deletions
diff --git a/drape/overlay_tree.hpp b/drape/overlay_tree.hpp index c1094b18ad..d56ef3b43f 100644 --- a/drape/overlay_tree.hpp +++ b/drape/overlay_tree.hpp @@ -18,36 +18,23 @@ namespace dp namespace detail { -struct OverlayInfo -{ - ref_ptr<OverlayHandle> m_handle; - - OverlayInfo() = default; - OverlayInfo(ref_ptr<OverlayHandle> handle) - : m_handle(handle) - {} - - bool operator==(OverlayInfo const & rhs) const - { - return m_handle == rhs.m_handle; - } -}; - struct OverlayTraits { ScreenBase m_modelView; - inline m2::RectD const LimitRect(OverlayInfo const & info) + inline m2::RectD const LimitRect(ref_ptr<OverlayHandle> const & handle) { - return info.m_handle->GetExtendedPixelRect(m_modelView); + return handle->GetExtendedPixelRect(m_modelView); } }; } -class OverlayTree : public m4::Tree<detail::OverlayInfo, detail::OverlayTraits> +using TOverlayContainer = buffer_vector<ref_ptr<OverlayHandle>, 8>; + +class OverlayTree : public m4::Tree<ref_ptr<OverlayHandle>, detail::OverlayTraits> { - using TBase = m4::Tree<detail::OverlayInfo, detail::OverlayTraits>; + using TBase = m4::Tree<ref_ptr<OverlayHandle>, detail::OverlayTraits>; public: OverlayTree(); @@ -60,9 +47,8 @@ public: void Add(ref_ptr<OverlayHandle> handle); void EndOverlayPlacing(); - using TSelectResult = buffer_vector<ref_ptr<OverlayHandle>, 8>; - void Select(m2::RectD const & rect, TSelectResult & result) const; - void Select(m2::PointD const & glbPoint, TSelectResult & result) const; + void Select(m2::RectD const & rect, TOverlayContainer & result) const; + void Select(m2::PointD const & glbPoint, TOverlayContainer & result) const; void SetFollowingMode(bool mode); @@ -83,14 +69,14 @@ public: private: ScreenBase const & GetModelView() const { return m_traits.m_modelView; } void InsertHandle(ref_ptr<OverlayHandle> handle, - detail::OverlayInfo const & parentOverlay); + ref_ptr<OverlayHandle> const & parentOverlay); bool CheckHandle(ref_ptr<OverlayHandle> handle, int currentRank, - detail::OverlayInfo & parentOverlay) const; - void AddHandleToDelete(detail::OverlayInfo const & overlay); + ref_ptr<OverlayHandle> & parentOverlay) const; + void AddHandleToDelete(ref_ptr<OverlayHandle> const & handle); int m_frameCounter; array<vector<ref_ptr<OverlayHandle>>, dp::OverlayRanksCount> m_handles; - vector<detail::OverlayInfo> m_handlesToDelete; + vector<ref_ptr<OverlayHandle>> m_handlesToDelete; bool m_followingMode; #ifdef COLLECT_DISPLACEMENT_INFO |