diff options
author | r.kuznetsov <r.kuznetsov@corp.mail.ru> | 2015-05-25 10:03:32 +0300 |
---|---|---|
committer | r.kuznetsov <r.kuznetsov@corp.mail.ru> | 2015-11-30 16:08:30 +0300 |
commit | 75d9e73f981dcf41a6b28131670a8f4d3f41a978 (patch) | |
tree | dd6745d5d7f8ba71350b7efc71c92f9ef5c7156a /drape/overlay_tree.hpp | |
parent | 4da09701875359b00d81ab00a09c5ddb70a7c83e (diff) |
Added separated clipping of transparent and solid objects by overlay tree
Diffstat (limited to 'drape/overlay_tree.hpp')
-rw-r--r-- | drape/overlay_tree.hpp | 27 |
1 files changed, 22 insertions, 5 deletions
diff --git a/drape/overlay_tree.hpp b/drape/overlay_tree.hpp index b389c69eb6..6c0282e3e6 100644 --- a/drape/overlay_tree.hpp +++ b/drape/overlay_tree.hpp @@ -12,25 +12,42 @@ namespace dp namespace detail { +struct OverlayInfo +{ + ref_ptr<OverlayHandle> m_handle; + bool m_isTransparent = false; + + OverlayInfo() = default; + OverlayInfo(ref_ptr<OverlayHandle> handle, bool isTransparent) + : m_handle(handle) + , m_isTransparent(isTransparent) + {} + + bool operator==(OverlayInfo const & rhs) const + { + return m_handle == rhs.m_handle && m_isTransparent == rhs.m_isTransparent; + } +}; + struct OverlayTraits { ScreenBase m_modelView; - inline m2::RectD const LimitRect(ref_ptr<OverlayHandle> handle) + inline m2::RectD const LimitRect(OverlayInfo const & info) { - return handle->GetPixelRect(m_modelView); + return info.m_handle->GetPixelRect(m_modelView); } }; } -class OverlayTree : public m4::Tree<ref_ptr<OverlayHandle>, detail::OverlayTraits> +class OverlayTree : public m4::Tree<detail::OverlayInfo, detail::OverlayTraits> { - typedef m4::Tree<ref_ptr<OverlayHandle>, detail::OverlayTraits> BaseT; + typedef m4::Tree<detail::OverlayInfo, detail::OverlayTraits> BaseT; public: void StartOverlayPlacing(ScreenBase const & screen, bool canOverlap = false); - void Add(ref_ptr<OverlayHandle> handle); + void Add(ref_ptr<OverlayHandle> handle, bool isTransparent); void EndOverlayPlacing(); private: |