diff OrthancStone/Sources/Scene2D/GrayscaleWindowingSceneTracker.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 5cdc5b98f14d
line wrap: on
line diff
--- a/OrthancStone/Sources/Scene2D/GrayscaleWindowingSceneTracker.cpp	Wed Oct 28 20:06:55 2020 +0100
+++ b/OrthancStone/Sources/Scene2D/GrayscaleWindowingSceneTracker.cpp	Wed Oct 28 20:14:34 2020 +0100
@@ -38,10 +38,11 @@
       FloatTextureSceneLayer*             layer_;
 
     public:
-      GrayscaleLayerAccessor(boost::shared_ptr<IViewport> viewport,
+      GrayscaleLayerAccessor(boost::weak_ptr<IViewport> viewportWeak,
                              int layerIndex) :
         layer_(NULL)
       {
+        boost::shared_ptr<IViewport> viewport = viewportWeak.lock();
         if (viewport != NULL)
         {
           lock_.reset(viewport->Lock());
@@ -89,7 +90,8 @@
   {
     if (active_)
     {
-      GrayscaleLayerAccessor accessor(viewport_, layerIndex_);
+      boost::shared_ptr<IViewport> viewport = viewport_.lock();
+      GrayscaleLayerAccessor accessor(viewport, layerIndex_);
       
       if (accessor.IsValid())
       {
@@ -100,7 +102,7 @@
   }
     
 
-  GrayscaleWindowingSceneTracker::GrayscaleWindowingSceneTracker(boost::shared_ptr<IViewport> viewport,
+  GrayscaleWindowingSceneTracker::GrayscaleWindowingSceneTracker(boost::weak_ptr<IViewport> viewport,
                                                                  int layerIndex,
                                                                  const PointerEvent& event,
                                                                  unsigned int canvasWidth,
@@ -115,7 +117,8 @@
     if (canvasWidth > 3 &&
         canvasHeight > 3)
     {
-      GrayscaleLayerAccessor accessor(viewport_, layerIndex_);
+      boost::weak_ptr<IViewport> viewport = viewport_.lock();
+      GrayscaleLayerAccessor accessor(viewport, layerIndex_);
       
       if (accessor.IsValid())
       {
@@ -143,8 +146,8 @@
       const double x = event.GetMainPosition().GetX();
       const double y = event.GetMainPosition().GetY();
 
-      float center = originalCenter_ + (x - clickX_) * normalization_;
-      float width = originalWidth_ + (y - clickY_) * normalization_;
+      float center = originalCenter_ + static_cast<float>((x - clickX_) * normalization_);
+      float width = originalWidth_ + static_cast<float>((y - clickY_) * normalization_);
 
       if (width <= 1)
       {