diff OrthancStone/Sources/Viewport/DefaultViewportInteractor.cpp @ 1925:a7a77488ddb1

fix
author Sebastien Jodogne <s.jodogne@gmail.com>
date Wed, 23 Mar 2022 14:21:22 +0100
parents 7053b8a0aaec
children 317a53d4fdc6
line wrap: on
line diff
--- a/OrthancStone/Sources/Viewport/DefaultViewportInteractor.cpp	Wed Mar 23 12:24:35 2022 +0100
+++ b/OrthancStone/Sources/Viewport/DefaultViewportInteractor.cpp	Wed Mar 23 14:21:22 2022 +0100
@@ -26,6 +26,7 @@
 #include "../Scene2D/PanSceneTracker.h"
 #include "../Scene2D/RotateSceneTracker.h"
 #include "../Scene2D/ZoomSceneTracker.h"
+#include "../Scene2DViewport/ViewportController.h"
 
 #include <OrthancException.h>
 
@@ -47,8 +48,28 @@
         return new RotateSceneTracker(viewport, event);
 
       case MouseAction_GrayscaleWindowing:
-        return new GrayscaleWindowingSceneTracker(
-          viewport, windowingLayer_, event, viewportWidth, viewportHeight);
+      {
+        boost::shared_ptr<IViewport> v(viewport.lock());
+        if (v == NULL)
+        {
+          return NULL;
+        }
+        else
+        {
+          std::unique_ptr<IViewport::ILock> lock(v->Lock());
+          if (lock->GetController().GetScene().HasLayer(windowingLayer_) &&
+              lock->GetController().GetScene().GetLayer(windowingLayer_).GetType() == ISceneLayer::Type_FloatTexture)
+          {
+            return new GrayscaleWindowingSceneTracker(
+              viewport, windowingLayer_, event, viewportWidth, viewportHeight);
+          }
+          else
+          {
+            // Don't create the tracker if the layer is not a float texture
+            return NULL;
+          }
+        }
+      }
 
       case MouseAction_Pan:
         return new PanSceneTracker(viewport, event);