diff Framework/Scene2DViewport/EditLineMeasureTracker.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 e713f1a99861
children 86a8266b8888
line wrap: on
line diff
--- a/Framework/Scene2DViewport/EditLineMeasureTracker.cpp	Fri Nov 29 11:03:41 2019 +0100
+++ b/Framework/Scene2DViewport/EditLineMeasureTracker.cpp	Fri Nov 29 21:22:21 2019 +0100
@@ -32,8 +32,16 @@
     const PointerEvent& e) 
     : EditMeasureTracker(controllerW, e)
   {
-    ScenePoint2D scenePos = e.GetMainPosition().Apply(
-      GetScene().GetCanvasToSceneTransform());
+    ScenePoint2D scenePos = e.GetMainPosition();
+
+    {
+      boost::shared_ptr<ViewportController> controller = controllerW.lock();
+      if (controller)
+      {
+        std::auto_ptr<IViewport::ILock> lock(controller->GetViewport().Lock());
+        scenePos = e.GetMainPosition().Apply(lock->GetScene().GetCanvasToSceneTransform());
+      }
+    }
 
     modifiedZone_ = dynamic_cast<LineMeasureTool&>(*measureTool).LineHitTest(scenePos);
 
@@ -47,44 +55,49 @@
 
   void EditLineMeasureTracker::PointerMove(const PointerEvent& e)
   {
-    ScenePoint2D scenePos = e.GetMainPosition().Apply(
-      GetScene().GetCanvasToSceneTransform());
-
-    ScenePoint2D delta = scenePos - GetOriginalClickPosition();
-
-    boost::shared_ptr<LineMeasureToolMemento> memento =
-      boost::dynamic_pointer_cast<LineMeasureToolMemento>(command_->mementoOriginal_);
-
-    ORTHANC_ASSERT(memento.get() != NULL);
-
-    switch (modifiedZone_)
-    {
-    case LineMeasureTool::LineHighlightArea_Start:
+    boost::shared_ptr<ViewportController> controller = controllerW_.lock();
+    if (controller)
     {
-      ScenePoint2D newStart = memento->start_ + delta;
-      GetCommand()->SetStart(newStart);
-    }
-    break;
-    case LineMeasureTool::LineHighlightArea_End:
-    {
-      ScenePoint2D newEnd = memento->end_ + delta;
-      GetCommand()->SetEnd(newEnd);
-    }
-    break;
-    case LineMeasureTool::LineHighlightArea_Segment:
-    {
-      ScenePoint2D newStart = memento->start_ + delta;
-      ScenePoint2D newEnd = memento->end_ + delta;
-      GetCommand()->SetStart(newStart);
-      GetCommand()->SetEnd(newEnd);
-    }
-    break;
-    default:
-      LOG(WARNING) << "Warning: please retry the measuring tool editing operation!";
+      std::auto_ptr<IViewport::ILock> lock(controller->GetViewport().Lock());
+      ScenePoint2D scenePos = e.GetMainPosition().Apply(
+        lock->GetScene().GetCanvasToSceneTransform());
+
+      ScenePoint2D delta = scenePos - GetOriginalClickPosition();
+
+      boost::shared_ptr<LineMeasureToolMemento> memento =
+        boost::dynamic_pointer_cast<LineMeasureToolMemento>(command_->mementoOriginal_);
+
+      ORTHANC_ASSERT(memento.get() != NULL);
+
+      switch (modifiedZone_)
+      {
+        case LineMeasureTool::LineHighlightArea_Start:
+        {
+          ScenePoint2D newStart = memento->start_ + delta;
+          GetCommand()->SetStart(newStart);
+        }
         break;
+        case LineMeasureTool::LineHighlightArea_End:
+        {
+          ScenePoint2D newEnd = memento->end_ + delta;
+          GetCommand()->SetEnd(newEnd);
+        }
+        break;
+        case LineMeasureTool::LineHighlightArea_Segment:
+        {
+          ScenePoint2D newStart = memento->start_ + delta;
+          ScenePoint2D newEnd = memento->end_ + delta;
+          GetCommand()->SetStart(newStart);
+          GetCommand()->SetEnd(newEnd);
+        }
+        break;
+        default:
+          LOG(WARNING) << "Warning: please retry the measuring tool editing operation!";
+          break;
+      }
     }
   }
-
+  
   void EditLineMeasureTracker::PointerUp(const PointerEvent& e)
   {
     alive_ = false;