From 435cb719be1332bbfdb019dbfc54c4066ee2f729 Mon Sep 17 00:00:00 2001 From: rachytski Date: Wed, 9 Jan 2013 16:50:08 +0300 Subject: [PATCH] changes according to code review. --- anim/controller.cpp | 11 +++++++++++ anim/controller.hpp | 8 ++++++++ map/compass_arrow.cpp | 4 +--- map/location_state.cpp | 38 +++++++++++--------------------------- 4 files changed, 31 insertions(+), 30 deletions(-) diff --git a/anim/controller.cpp b/anim/controller.cpp index 94495666c2..ff3fd2a877 100644 --- a/anim/controller.cpp +++ b/anim/controller.cpp @@ -7,6 +7,17 @@ namespace anim { + Controller::Guard::Guard(Controller * controller) + : m_controller(controller) + { + m_controller->Lock(); + } + + Controller::Guard::~Guard() + { + m_controller->Unlock(); + } + Controller::Controller() { m_LockCount = 0; diff --git a/anim/controller.hpp b/anim/controller.hpp index a26f5e2721..37ea774387 100644 --- a/anim/controller.hpp +++ b/anim/controller.hpp @@ -31,6 +31,14 @@ namespace anim static void MergeTasks(list > & from, list > & to); public: + + struct Guard + { + Controller * m_controller; + Guard(Controller * controller); + ~Guard(); + }; + // Constructor Controller(); // Destructor diff --git a/map/compass_arrow.cpp b/map/compass_arrow.cpp index ac10ea67ad..a361f8b3a4 100644 --- a/map/compass_arrow.cpp +++ b/map/compass_arrow.cpp @@ -144,7 +144,7 @@ void CompassArrow::purge() bool CompassArrow::onTapEnded(m2::PointD const & pt) { anim::Controller * animController = m_framework->GetAnimController(); - animController->Lock(); + anim::Controller::Guard guard(animController); /// switching off compass follow mode m_framework->GetInformationDisplay().locationState()->StopCompassFollowing(); @@ -154,8 +154,6 @@ bool CompassArrow::onTapEnded(m2::PointD const & pt) m_framework->GetAnimator().RotateScreen(startAngle, endAngle); - animController->Unlock(); - m_framework->Invalidate(); return true; diff --git a/map/location_state.cpp b/map/location_state.cpp index d3a86ed2a0..ed9c1733a8 100644 --- a/map/location_state.cpp +++ b/map/location_state.cpp @@ -517,22 +517,18 @@ namespace location return; anim::Controller * controller = m_framework->GetAnimController(); - - controller->Lock(); + anim::Controller::Guard guard(controller); double startAngle = m_framework->GetNavigator().Screen().GetAngle(); double endAngle = -m_compassFilter.GetHeadingRad(); m_framework->GetAnimator().RotateScreen(startAngle, endAngle); - - controller->Unlock(); } void State::AnimateToPosition() { anim::Controller * controller = m_framework->GetAnimController(); - - controller->Lock(); + anim::Controller::Guard guard(controller); m2::PointD startPt = m_framework->GetNavigator().Screen().GetOrg(); m2::PointD endPt = Position(); @@ -541,21 +537,18 @@ namespace location double speed = ComputeMoveSpeed(startPt, endPt, s); m_framework->GetAnimator().MoveScreen(startPt, endPt, speed); - - controller->Unlock(); } void State::AnimateToPositionAndEnqueueFollowing() { anim::Controller * controller = m_framework->GetAnimController(); + anim::Controller::Guard guard(controller); - controller->Lock(); - - m2::PointD startPt = m_framework->GetNavigator().Screen().GetOrg(); - m2::PointD endPt = Position(); + m2::PointD const startPt = m_framework->GetNavigator().Screen().GetOrg(); + m2::PointD const endPt = Position(); ScreenBase const & s = m_framework->GetNavigator().Screen(); - double speed = ComputeMoveSpeed(startPt, endPt, s); + double const speed = ComputeMoveSpeed(startPt, endPt, s); shared_ptr const & t = m_framework->GetAnimator().MoveScreen(startPt, endPt, speed); @@ -563,21 +556,18 @@ namespace location t->AddCallback(anim::Task::EEnded, bind(&State::SetIsCentered, this, true)); t->AddCallback(anim::Task::EEnded, bind(&State::StartCompassFollowing, this)); t->Unlock(); - - controller->Unlock(); } void State::AnimateToPositionAndEnqueueLocationProcessMode(location::ELocationProcessMode mode) { anim::Controller * controller = m_framework->GetAnimController(); + anim::Controller::Guard guard(controller); - controller->Lock(); - - m2::PointD startPt = m_framework->GetNavigator().Screen().GetOrg(); - m2::PointD endPt = Position(); + m2::PointD const startPt = m_framework->GetNavigator().Screen().GetOrg(); + m2::PointD const endPt = Position(); ScreenBase const & s = m_framework->GetNavigator().Screen(); - double speed = ComputeMoveSpeed(startPt, endPt, s); + double const speed = ComputeMoveSpeed(startPt, endPt, s); shared_ptr const & t = m_framework->GetAnimator().MoveScreen(startPt, endPt, speed); @@ -585,8 +575,6 @@ namespace location t->AddCallback(anim::Task::EEnded, bind(&State::SetIsCentered, this, true)); t->AddCallback(anim::Task::EEnded, bind(&State::SetLocationProcessMode, this, mode)); t->Unlock(); - - controller->Unlock(); } void State::StartCompassFollowing() @@ -657,9 +645,7 @@ namespace location if (!m_framework->GetNavigator().DoSupportRotation()) return false; - anim::Controller * controller = m_framework->GetAnimController(); - - controller->Lock(); + anim::Controller::Guard guard(m_framework->GetAnimController()); switch (state()) { @@ -684,8 +670,6 @@ namespace location break; }; - controller->Unlock(); - invalidate(); return true; }