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
diff options
context:
space:
mode:
authorr.kuznetsov <r.kuznetsov@corp.mail.ru>2015-05-25 10:03:32 +0300
committerr.kuznetsov <r.kuznetsov@corp.mail.ru>2015-11-30 16:08:30 +0300
commit75d9e73f981dcf41a6b28131670a8f4d3f41a978 (patch)
treedd6745d5d7f8ba71350b7efc71c92f9ef5c7156a /drape/overlay_tree.hpp
parent4da09701875359b00d81ab00a09c5ddb70a7c83e (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.hpp27
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: