diff Framework/Scene2DViewport/MeasureTrackers.cpp @ 1203:f3bb9a6dd949 broker

locking abstraction in IViewport
author Sebastien Jodogne <s.jodogne@gmail.com>
date Fri, 29 Nov 2019 21:22:21 +0100
parents 0aff28f15ea2
children 86a8266b8888
line wrap: on
line diff
--- a/Framework/Scene2DViewport/MeasureTrackers.cpp	Fri Nov 29 11:03:41 2019 +0100
+++ b/Framework/Scene2DViewport/MeasureTrackers.cpp	Fri Nov 29 21:22:21 2019 +0100
@@ -53,23 +53,18 @@
       command_->Undo();
   }
 
-  Scene2D& CreateMeasureTracker::GetScene()
-  {
-    return controllerW_.lock()->GetScene();
-  }
-
   EditMeasureTracker::EditMeasureTracker(boost::weak_ptr<ViewportController> controllerW, const PointerEvent& e)
     : controllerW_(controllerW)
     , alive_(true)
     , commitResult_(true)
   {
     boost::shared_ptr<ViewportController> controller = controllerW.lock();
-    originalClickPosition_ = e.GetMainPosition().Apply(controller->GetScene().GetCanvasToSceneTransform());
-  }
 
-  Scene2D& EditMeasureTracker::GetScene()
-  {
-    return controllerW_.lock()->GetScene();
+    if (controller)
+    {
+      std::auto_ptr<IViewport::ILock> lock(controller->GetViewport().Lock());
+      originalClickPosition_ = e.GetMainPosition().Apply(lock->GetScene().GetCanvasToSceneTransform());
+    }
   }
 
   void EditMeasureTracker::Cancel()