From b42af2876d2734272aa85ca83ec359f9e7912210 Mon Sep 17 00:00:00 2001 From: "r.kuznetsov" Date: Mon, 28 Dec 2015 18:08:46 +0300 Subject: [PATCH 1/2] Fixed crash in layer renderer --- drape_frontend/gui/layer_render.cpp | 10 ++++++++++ drape_frontend/gui/layer_render.hpp | 1 + drape_frontend/user_event_stream.cpp | 1 - 3 files changed, 11 insertions(+), 1 deletion(-) diff --git a/drape_frontend/gui/layer_render.cpp b/drape_frontend/gui/layer_render.cpp index 36992f923f..e7b41c5c94 100644 --- a/drape_frontend/gui/layer_render.cpp +++ b/drape_frontend/gui/layer_render.cpp @@ -44,9 +44,18 @@ void LayerRenderer::Merge(ref_ptr other) { TRenderers::iterator it = m_renderers.find(r.first); if (it != m_renderers.end()) + { it->second = move(r.second); + if (m_activeOverlay != nullptr && m_activeOverlayRenderer == r.first) + { + m_activeOverlay->OnTapEnd(); + m_activeOverlay = nullptr; + } + } else + { m_renderers.insert(make_pair(r.first, move(r.second))); + } } other->m_renderers.clear(); @@ -82,6 +91,7 @@ bool LayerRenderer::OnTouchDown(m2::RectD const & touchArea) m_activeOverlay = r.second->ProcessTapEvent(touchArea); if (m_activeOverlay != nullptr) { + m_activeOverlayRenderer = r.first; m_activeOverlay->OnTapBegin(); return true; } diff --git a/drape_frontend/gui/layer_render.hpp b/drape_frontend/gui/layer_render.hpp index 9a48aa1aa8..cc4eb579a8 100644 --- a/drape_frontend/gui/layer_render.hpp +++ b/drape_frontend/gui/layer_render.hpp @@ -46,6 +46,7 @@ private: TRenderers m_renderers; ref_ptr m_activeOverlay; + EWidget m_activeOverlayRenderer = EWidget::WIDGET_RULER; }; class LayerCacher diff --git a/drape_frontend/user_event_stream.cpp b/drape_frontend/user_event_stream.cpp index f2e1c9397e..56e8b3bf27 100644 --- a/drape_frontend/user_event_stream.cpp +++ b/drape_frontend/user_event_stream.cpp @@ -495,7 +495,6 @@ bool UserEventStream::TouchMove(array const & touches, double timestam break; case STATE_TAP_DETECTION: case STATE_WAIT_DOUBLE_TAP: - ASSERT_EQUAL(touchCount, 1, ()); if (m_startDragOrg.SquareLength(touches[0].m_location) > dragThreshold) CancelTapDetector(); else From e840239e809625528fc0e90bda766e6671d7b38f Mon Sep 17 00:00:00 2001 From: "r.kuznetsov" Date: Tue, 29 Dec 2015 10:12:51 +0300 Subject: [PATCH 2/2] Review fixes --- drape_frontend/gui/layer_render.cpp | 4 ++-- drape_frontend/gui/layer_render.hpp | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/drape_frontend/gui/layer_render.cpp b/drape_frontend/gui/layer_render.cpp index e7b41c5c94..3f2ce8202e 100644 --- a/drape_frontend/gui/layer_render.cpp +++ b/drape_frontend/gui/layer_render.cpp @@ -46,7 +46,7 @@ void LayerRenderer::Merge(ref_ptr other) if (it != m_renderers.end()) { it->second = move(r.second); - if (m_activeOverlay != nullptr && m_activeOverlayRenderer == r.first) + if (m_activeOverlay != nullptr && m_activeOverlayWidget == r.first) { m_activeOverlay->OnTapEnd(); m_activeOverlay = nullptr; @@ -91,7 +91,7 @@ bool LayerRenderer::OnTouchDown(m2::RectD const & touchArea) m_activeOverlay = r.second->ProcessTapEvent(touchArea); if (m_activeOverlay != nullptr) { - m_activeOverlayRenderer = r.first; + m_activeOverlayWidget = r.first; m_activeOverlay->OnTapBegin(); return true; } diff --git a/drape_frontend/gui/layer_render.hpp b/drape_frontend/gui/layer_render.hpp index cc4eb579a8..7d27dbb600 100644 --- a/drape_frontend/gui/layer_render.hpp +++ b/drape_frontend/gui/layer_render.hpp @@ -46,7 +46,7 @@ private: TRenderers m_renderers; ref_ptr m_activeOverlay; - EWidget m_activeOverlayRenderer = EWidget::WIDGET_RULER; + EWidget m_activeOverlayWidget = EWidget::WIDGET_RULER; }; class LayerCacher