From c1ec502bf83c21204f77da77ffec49872326a594 Mon Sep 17 00:00:00 2001 From: ExMix Date: Mon, 15 Jun 2015 18:55:17 +0300 Subject: [PATCH] [drape] selection object small refactoring. Empty state added --- drape_frontend/drape_engine.cpp | 4 ++-- drape_frontend/drape_engine.hpp | 2 +- drape_frontend/frontend_renderer.cpp | 9 +-------- drape_frontend/message_subclasses.hpp | 20 +++++++++++++++----- drape_frontend/selection_shape.cpp | 20 +++++++++----------- drape_frontend/selection_shape.hpp | 6 +++--- map/framework.cpp | 2 +- 7 files changed, 32 insertions(+), 31 deletions(-) diff --git a/drape_frontend/drape_engine.cpp b/drape_frontend/drape_engine.cpp index fbd23c5b3e..64e61c77c4 100644 --- a/drape_frontend/drape_engine.cpp +++ b/drape_frontend/drape_engine.cpp @@ -288,10 +288,10 @@ FeatureID DrapeEngine::GetVisiblePOI(m2::PointD const & glbPoint) return result; } -void DrapeEngine::SelectObject(SelectionShape::ESelectedObject obj, m2::PointD const & pt) +void DrapeEngine::SelectObject(SelectionShape::ESelectedObject obj, m2::PointD const & pt, bool isAnim) { m_threadCommutator->PostMessage(ThreadsCommutator::RenderThread, - make_unique_dp(obj, pt), + make_unique_dp(obj, pt, isAnim), MessagePriority::High); } diff --git a/drape_frontend/drape_engine.hpp b/drape_frontend/drape_engine.hpp index d1a3af168b..83a420522a 100644 --- a/drape_frontend/drape_engine.hpp +++ b/drape_frontend/drape_engine.hpp @@ -94,7 +94,7 @@ public: void SetUserPositionListener(TUserPositionChangedFn const & fn); FeatureID GetVisiblePOI(m2::PointD const & glbPoint); - void SelectObject(SelectionShape::ESelectedObject obj, m2::PointD const & pt); + void SelectObject(SelectionShape::ESelectedObject obj, m2::PointD const & pt, bool isAnim); void DeselectObject(); bool GetMyPosition(m2::PointD & myPosition); diff --git a/drape_frontend/frontend_renderer.cpp b/drape_frontend/frontend_renderer.cpp index a43480864a..4d433e4244 100755 --- a/drape_frontend/frontend_renderer.cpp +++ b/drape_frontend/frontend_renderer.cpp @@ -262,16 +262,9 @@ void FrontendRenderer::AcceptMessage(ref_ptr message) ref_ptr msg = message; ASSERT(m_selectionShape != nullptr, ()); if (msg->IsDismiss()) - { m_selectionShape->Hide(); - } else - { - m_selectionShape->SetPosition(msg->GetPosition()); - m_selectionShape->SetSelectedObject(msg->GetSelectedObject()); - m_selectionShape->Hide(); - m_selectionShape->Show(); - } + m_selectionShape->Show(msg->GetSelectedObject(), msg->GetPosition(), msg->IsAnim()); break; } diff --git a/drape_frontend/message_subclasses.hpp b/drape_frontend/message_subclasses.hpp index 674a5f2fc1..aacf554d45 100644 --- a/drape_frontend/message_subclasses.hpp +++ b/drape_frontend/message_subclasses.hpp @@ -439,25 +439,35 @@ class SelectObjectMessage : public Message public: struct DismissTag {}; SelectObjectMessage(DismissTag) - : m_isDismiss(true) + : SelectObjectMessage(SelectionShape::OBJECT_EMPTY, m2::PointD::Zero(), false, true) { } - SelectObjectMessage(SelectionShape::ESelectedObject selectedObject, m2::PointD const & glbPoint) - : m_selected(selectedObject) - , m_glbPoint(glbPoint) - , m_isDismiss(false) + SelectObjectMessage(SelectionShape::ESelectedObject selectedObject, m2::PointD const & glbPoint, bool isAnim) + : SelectObjectMessage(selectedObject, glbPoint, isAnim, false) { } Type GetType() const override { return SelectObject; } m2::PointD const & GetPosition() const { return m_glbPoint; } SelectionShape::ESelectedObject GetSelectedObject() const { return m_selected; } + bool IsAnim() const { return m_isAnim; } bool IsDismiss() const { return m_isDismiss; } +private: + SelectObjectMessage(SelectionShape::ESelectedObject obj, m2::PointD const & pt, bool isAnim, bool isDismiss) + : m_selected(obj) + , m_glbPoint(pt) + , m_isAnim(isAnim) + , m_isDismiss(isDismiss) + { + + } + private: SelectionShape::ESelectedObject m_selected; m2::PointD m_glbPoint; + bool m_isAnim; bool m_isDismiss; }; diff --git a/drape_frontend/selection_shape.cpp b/drape_frontend/selection_shape.cpp index b9b55349a1..b87aa5e7a3 100644 --- a/drape_frontend/selection_shape.cpp +++ b/drape_frontend/selection_shape.cpp @@ -55,6 +55,7 @@ dp::BindingInfo GetBindingInfo() SelectionShape::SelectionShape(ref_ptr mng) : m_position(m2::PointD::Zero()) , m_animation(false, 0.25) + , m_selectedObject(OBJECT_EMPTY) { int const TriangleCount = 40; int const VertexCount = 3 * TriangleCount; @@ -102,19 +103,21 @@ SelectionShape::SelectionShape(ref_ptr mng) m_mapping.AddRangePoint(1.0, r); } -void SelectionShape::SetPosition(m2::PointD const & position) +void SelectionShape::Show(ESelectedObject obj, m2::PointD const & position, bool isAnimate) { + m_animation.Hide(); m_position = position; -} - -void SelectionShape::Show() -{ - m_animation.ShowAnimated(); + m_selectedObject = obj; + if (isAnimate) + m_animation.ShowAnimated(); + else + m_animation.Show(); } void SelectionShape::Hide() { m_animation.Hide(); + m_selectedObject = OBJECT_EMPTY; } void SelectionShape::Render(ScreenBase const & screen, ref_ptr mng, @@ -133,11 +136,6 @@ void SelectionShape::Render(ScreenBase const & screen, ref_ptr mng); - void SetPosition(m2::PointD const & position); - void Show(); + void SetPosition(m2::PointD const & position) { m_position = position; } + void Show(ESelectedObject obj, m2::PointD const & position, bool isAnimate); void Hide(); void Render(ScreenBase const & screen, ref_ptr mng, dp::UniformValuesStorage const & commonUniforms); - void SetSelectedObject(ESelectedObject obj); ESelectedObject GetSelectedObject() const; private: diff --git a/map/framework.cpp b/map/framework.cpp index 125e8d33e7..dc4457fe49 100644 --- a/map/framework.cpp +++ b/map/framework.cpp @@ -1655,7 +1655,7 @@ void Framework::ActivateUserMark(UserMark const * mark, bool needAnim) else if (type == UserMark::Type::POI) object = df::SelectionShape::OBJECT_POI; - CallDrapeFunction(bind(&df::DrapeEngine::SelectObject, _1, object, pt)); + CallDrapeFunction(bind(&df::DrapeEngine::SelectObject, _1, object, pt, needAnim)); } else {