diff options
author | r.kuznetsov <r.kuznetsov@corp.mail.ru> | 2015-12-01 14:35:47 +0300 |
---|---|---|
committer | r.kuznetsov <r.kuznetsov@corp.mail.ru> | 2015-12-01 18:30:50 +0300 |
commit | e7851ffcece6131950de7f5e83b5cd57804599aa (patch) | |
tree | ba59efdc721e3c801ac3633434a6472885a2c5df /drape | |
parent | 959dbce5afdbcd1ccab1f44b93fd6993cc57d870 (diff) |
Fixed selection of POI and texts
Diffstat (limited to 'drape')
-rw-r--r-- | drape/drape_tests/font_texture_tests.cpp | 4 | ||||
-rw-r--r-- | drape/overlay_handle.cpp | 19 | ||||
-rw-r--r-- | drape/overlay_handle.hpp | 7 | ||||
-rw-r--r-- | drape/overlay_tree.cpp | 20 | ||||
-rw-r--r-- | drape/overlay_tree.hpp | 4 | ||||
-rw-r--r-- | drape/render_bucket.cpp | 2 |
6 files changed, 44 insertions, 12 deletions
diff --git a/drape/drape_tests/font_texture_tests.cpp b/drape/drape_tests/font_texture_tests.cpp index f397397b43..a162a7c5f9 100644 --- a/drape/drape_tests/font_texture_tests.cpp +++ b/drape/drape_tests/font_texture_tests.cpp @@ -95,7 +95,7 @@ UNIT_TEST(UploadingGlyphs) GetPlatform().GetFontNames(args.m_fonts); GlyphManager mng(args); - DummyGlyphIndex index(m2::PointU(64, 64), make_ref(&mng)); + DummyGlyphIndex index(m2::PointU(128, 128), make_ref(&mng)); index.MapResource(GlyphKey(0x58)); index.MapResource(GlyphKey(0x59)); index.MapResource(GlyphKey(0x61)); @@ -104,7 +104,7 @@ UNIT_TEST(UploadingGlyphs) Texture::Params p; p.m_allocator = GetDefaultAllocator(); p.m_format = dp::ALPHA; - p.m_width = p.m_height = 64; + p.m_width = p.m_height = 128; DummyTexture tex; tex.Create(p); diff --git a/drape/overlay_handle.cpp b/drape/overlay_handle.cpp index a8e9bdf9f4..69d10c9f5f 100644 --- a/drape/overlay_handle.cpp +++ b/drape/overlay_handle.cpp @@ -24,6 +24,7 @@ OverlayHandle::OverlayHandle(FeatureID const & id, dp::Anchor anchor, uint64_t p , m_anchor(anchor) , m_priority(priority) , m_overlayRank(OverlayRank0) + , m_extendingSize(0) , m_isVisible(false) { } @@ -62,8 +63,8 @@ bool OverlayHandle::IsIntersect(ScreenBase const & screen, ref_ptr<OverlayHandle Rects ar1; Rects ar2; - GetPixelShape(screen, ar1); - h->GetPixelShape(screen, ar2); + GetExtendedPixelShape(screen, ar1); + h->GetExtendedPixelShape(screen, ar2); for (size_t i = 0; i < ar1.size(); ++i) for (size_t j = 0; j < ar2.size(); ++j) @@ -121,6 +122,20 @@ OverlayHandle::TOffsetNode const & OverlayHandle::GetOffsetNode(uint8_t bufferID return *it; } +m2::RectD OverlayHandle::GetExtendedPixelRect(ScreenBase const & screen) const +{ + m2::RectD rect = GetPixelRect(screen); + rect.Inflate(m_extendingSize, m_extendingSize); + return rect; +} + +void OverlayHandle::GetExtendedPixelShape(ScreenBase const & screen, Rects & rects) const +{ + GetPixelShape(screen, rects); + for (auto & rect : rects) + rect.Inflate(m_extendingSize, m_extendingSize); +} + SquareHandle::SquareHandle(FeatureID const & id, dp::Anchor anchor, m2::PointD const & gbPivot, m2::PointD const & pxSize, uint64_t priority) diff --git a/drape/overlay_handle.hpp b/drape/overlay_handle.hpp index 0c4889b7ed..d6aed64b57 100644 --- a/drape/overlay_handle.hpp +++ b/drape/overlay_handle.hpp @@ -48,9 +48,13 @@ public: virtual bool Update(ScreenBase const & /*screen*/) { return true; } virtual m2::RectD GetPixelRect(ScreenBase const & screen) const = 0; - virtual void GetPixelShape(ScreenBase const & screen, Rects & rects) const = 0; + double GetExtendingSize() const { return m_extendingSize; } + void SetExtendingSize(double extendingSize) { m_extendingSize = extendingSize; } + m2::RectD GetExtendedPixelRect(ScreenBase const & screen) const; + void GetExtendedPixelShape(ScreenBase const & screen, Rects & rects) const; + bool IsIntersect(ScreenBase const & screen, ref_ptr<OverlayHandle> const h) const; virtual bool IndexesRequired() const { return true; } @@ -78,6 +82,7 @@ protected: uint64_t const m_priority; int m_overlayRank; + double m_extendingSize; typedef pair<BindingInfo, MutateRegion> TOffsetNode; TOffsetNode const & GetOffsetNode(uint8_t bufferID) const; diff --git a/drape/overlay_tree.cpp b/drape/overlay_tree.cpp index cf4576f05d..c3ecc9174a 100644 --- a/drape/overlay_tree.cpp +++ b/drape/overlay_tree.cpp @@ -54,11 +54,16 @@ OverlayTree::OverlayTree() m_handles[i].reserve(kAverageHandlesCount[i]); } -void OverlayTree::Frame() +bool OverlayTree::Frame() { + if (IsNeedUpdate()) + return true; + m_frameCounter++; if (m_frameCounter >= kFrameUpdarePeriod) m_frameCounter = -1; + + return IsNeedUpdate(); } bool OverlayTree::IsNeedUpdate() const @@ -68,7 +73,6 @@ bool OverlayTree::IsNeedUpdate() const void OverlayTree::ForceUpdate() { - Clear(); m_frameCounter = -1; } @@ -81,6 +85,8 @@ void OverlayTree::StartOverlayPlacing(ScreenBase const & screen) void OverlayTree::Add(ref_ptr<OverlayHandle> handle, bool isTransparent) { + ASSERT(IsNeedUpdate(), ()); + ScreenBase const & modelView = GetModelView(); handle->SetIsVisible(false); @@ -88,7 +94,7 @@ void OverlayTree::Add(ref_ptr<OverlayHandle> handle, bool isTransparent) if (!handle->Update(modelView)) return; - m2::RectD const pixelRect = handle->GetPixelRect(modelView); + m2::RectD const pixelRect = handle->GetExtendedPixelRect(modelView); if (!m_traits.m_modelView.PixelRect().IsIntersect(pixelRect)) { handle->SetIsVisible(false); @@ -103,8 +109,10 @@ void OverlayTree::Add(ref_ptr<OverlayHandle> handle, bool isTransparent) void OverlayTree::InsertHandle(ref_ptr<OverlayHandle> handle, bool isTransparent, detail::OverlayInfo const & parentOverlay) { + ASSERT(IsNeedUpdate(), ()); + ScreenBase const & modelView = GetModelView(); - m2::RectD const pixelRect = handle->GetPixelRect(modelView); + m2::RectD const pixelRect = handle->GetExtendedPixelRect(modelView); TOverlayContainer elements; @@ -155,6 +163,8 @@ void OverlayTree::InsertHandle(ref_ptr<OverlayHandle> handle, bool isTransparent void OverlayTree::EndOverlayPlacing() { + ASSERT(IsNeedUpdate(), ()); + HandleComparator comparator; for (int rank = 0; rank < dp::OverlayRanksCount; rank++) @@ -176,6 +186,8 @@ void OverlayTree::EndOverlayPlacing() { info.m_handle->SetIsVisible(true); }); + + m_frameCounter = 0; } bool OverlayTree::CheckHandle(ref_ptr<OverlayHandle> handle, int currentRank, diff --git a/drape/overlay_tree.hpp b/drape/overlay_tree.hpp index 1644c6775c..3979892c83 100644 --- a/drape/overlay_tree.hpp +++ b/drape/overlay_tree.hpp @@ -39,7 +39,7 @@ struct OverlayTraits inline m2::RectD const LimitRect(OverlayInfo const & info) { - return info.m_handle->GetPixelRect(m_modelView); + return info.m_handle->GetExtendedPixelRect(m_modelView); } }; @@ -52,7 +52,7 @@ class OverlayTree : public m4::Tree<detail::OverlayInfo, detail::OverlayTraits> public: OverlayTree(); - void Frame(); + bool Frame(); bool IsNeedUpdate() const; void ForceUpdate(); diff --git a/drape/render_bucket.cpp b/drape/render_bucket.cpp index b02401d7c5..0207f2e360 100644 --- a/drape/render_bucket.cpp +++ b/drape/render_bucket.cpp @@ -110,7 +110,7 @@ void RenderBucket::RenderDebug(ScreenBase const & screen) const for (auto const & handle : m_overlay) { OverlayHandle::Rects rects; - handle->GetPixelShape(screen, rects); + handle->GetExtendedPixelShape(screen, rects); for (auto const & rect : rects) DebugRectRenderer::Instance().DrawRect(screen, rect); } |