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:
authorr.kuznetsov <r.kuznetsov@corp.mail.ru>2015-12-01 14:35:47 +0300
committerr.kuznetsov <r.kuznetsov@corp.mail.ru>2015-12-01 18:30:50 +0300
commite7851ffcece6131950de7f5e83b5cd57804599aa (patch)
treeba59efdc721e3c801ac3633434a6472885a2c5df /drape
parent959dbce5afdbcd1ccab1f44b93fd6993cc57d870 (diff)
Fixed selection of POI and texts
Diffstat (limited to 'drape')
-rw-r--r--drape/drape_tests/font_texture_tests.cpp4
-rw-r--r--drape/overlay_handle.cpp19
-rw-r--r--drape/overlay_handle.hpp7
-rw-r--r--drape/overlay_tree.cpp20
-rw-r--r--drape/overlay_tree.hpp4
-rw-r--r--drape/render_bucket.cpp2
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);
}