diff OrthancStone/Sources/Viewport/DefaultViewportInteractor.cpp @ 1561:cf652990abb1

tunable mouse actions
author Sebastien Jodogne <s.jodogne@gmail.com>
date Thu, 20 Aug 2020 17:44:35 +0200
parents a6f339d8e4c2
children c476b0d5e59c
line wrap: on
line diff
--- a/OrthancStone/Sources/Viewport/DefaultViewportInteractor.cpp	Thu Aug 20 13:57:52 2020 +0200
+++ b/OrthancStone/Sources/Viewport/DefaultViewportInteractor.cpp	Thu Aug 20 17:44:35 2020 +0200
@@ -25,30 +25,64 @@
 #include "../Scene2D/RotateSceneTracker.h"
 #include "../Scene2D/ZoomSceneTracker.h"
 
+#include <OrthancException.h>
+
 namespace OrthancStone
 {
+  IFlexiblePointerTracker* DefaultViewportInteractor::CreateTrackerInternal(
+    boost::shared_ptr<IViewport> viewport,
+    MouseAction action,
+    const PointerEvent& event,
+    unsigned int viewportWidth,
+    unsigned int viewportHeight)
+  {
+    switch (action)
+    {
+      case MouseAction_Rotate:
+        return new RotateSceneTracker(viewport, event);
+
+      case MouseAction_GrayscaleWindowing:
+        return new GrayscaleWindowingSceneTracker(
+          viewport, windowingLayer_, event, viewportWidth, viewportHeight);
+
+      case MouseAction_Pan:
+        return new PanSceneTracker(viewport, event);
+      
+      case MouseAction_Zoom:
+        return new ZoomSceneTracker(viewport, event, viewportHeight);
+
+      default:
+        throw Orthanc::OrthancException(Orthanc::ErrorCode_ParameterOutOfRange);
+    }
+  }
+
+
   IFlexiblePointerTracker* DefaultViewportInteractor::CreateTracker(
     boost::shared_ptr<IViewport>  viewport,
     const PointerEvent&           event,
     unsigned int                  viewportWidth,
     unsigned int                  viewportHeight)
   {
+    MouseAction action;
+    
     switch (event.GetMouseButton())
     {
       case MouseButton_Left:
-        //return new RotateSceneTracker(viewport, event);
-
-        return new GrayscaleWindowingSceneTracker(
-          viewport, windowingLayer_, event, viewportWidth, viewportHeight);
+        action = leftButtonAction_;
+        break;
 
       case MouseButton_Middle:
-        return new PanSceneTracker(viewport, event);
+        action = middleButtonAction_;
+        break;
       
       case MouseButton_Right:
-        return new ZoomSceneTracker(viewport, event, viewportHeight);
+        action = rightButtonAction_;
+        break;
 
       default:
         return NULL;
     }
+
+    return CreateTrackerInternal(viewport, action, event, viewportWidth, viewportHeight);
   }
 }