diff OrthancStone/Sources/Scene2DViewport/MeasureTool.cpp @ 1606:874e178f34e9

- ViewportController now has weak ptr to Viewport - Measuring tools + related commands and all trackers now store only a weak_ptr to the Viewport and lock() on demand for usage - LayerHolder and FixedPoint aligner store only a weak_ptr to the Viewport, too - Fixed float/double warning in GrayscaleWindowingSceneTracker
author Benjamin Golinvaux <bgo@osimis.io>
date Wed, 28 Oct 2020 20:14:34 +0100
parents 8563ea5d8ae4
children 646e581e115b
line wrap: on
line diff
--- a/OrthancStone/Sources/Scene2DViewport/MeasureTool.cpp	Wed Oct 28 20:06:55 2020 +0100
+++ b/OrthancStone/Sources/Scene2DViewport/MeasureTool.cpp	Wed Oct 28 20:14:34 2020 +0100
@@ -25,6 +25,7 @@
 #include <Enumerations.h>
 #include <OrthancException.h>
 
+#include <boost/shared_ptr.hpp>
 #include <boost/math/constants/constants.hpp>
 
 #include "../Viewport/IViewport.h"
@@ -48,7 +49,25 @@
     return enabled_;
   }
 
-  MeasureTool::MeasureTool(boost::shared_ptr<IViewport> viewport) :
+  IViewport::ILock* MeasureTool::GetViewportLock()
+  {
+    boost::shared_ptr<IViewport> viewport = viewport_.lock();
+    if(viewport)
+        return viewport->Lock();
+    else
+        return nullptr;
+  }
+
+  IViewport::ILock* MeasureTool::GetViewportLock() const
+  {
+    boost::shared_ptr<IViewport> viewport = viewport_.lock();
+    if (viewport)
+      return viewport->Lock();
+    else
+      return nullptr;
+  }
+
+  MeasureTool::MeasureTool(boost::weak_ptr<IViewport> viewport) :
     enabled_(true),
     viewport_(viewport)
   {
@@ -56,7 +75,7 @@
 
   void MeasureTool::PostConstructor()
   {
-    std::unique_ptr<IViewport::ILock> lock(viewport_->Lock());
+    std::unique_ptr<IViewport::ILock> lock(GetViewportLock());
     ViewportController& controller = lock->GetController();
 
     Register<ViewportController::SceneTransformChanged>(