changeset 2350:ee74c9c97cbe refactoring

simplified IViewportInteractor::CreateTracker()
author Sebastien Jodogne <s.jodogne@gmail.com>
date Tue, 06 Oct 2026 18:32:31 +0200
parents 1f313d1113d7
children a7a9457a07c6
files Applications/Samples/Common/SimpleViewerCore.cpp Applications/StoneWebViewer/WebAssembly/StoneWebViewer.cpp OrthancStone/Sources/Scene2DViewport/ViewportController.cpp OrthancStone/Sources/Viewport/DefaultViewportInteractor.cpp OrthancStone/Sources/Viewport/DefaultViewportInteractor.h OrthancStone/Sources/Viewport/IViewportInteractor.h
diffstat 6 files changed, 22 insertions(+), 38 deletions(-) [+]
line wrap: on
line diff
--- a/Applications/Samples/Common/SimpleViewerCore.cpp	Tue Oct 06 18:21:55 2026 +0200
+++ b/Applications/Samples/Common/SimpleViewerCore.cpp	Tue Oct 06 18:32:31 2026 +0200
@@ -165,7 +165,7 @@
       default_.SetWindowingLayer(0);
     }
 
-    virtual IFlexiblePointerTracker* CreateTracker(const boost::shared_ptr<IViewport>& viewport,
+    virtual IFlexiblePointerTracker* CreateTracker(Scene2D& scene,
                                                    const PointerEvent& event,
                                                    unsigned int viewportWidth,
                                                    unsigned int viewportHeight) ORTHANC_OVERRIDE
@@ -174,15 +174,12 @@
 
       if (event.GetMouseButton() == MouseButton_Left)
       {
-        boost::shared_ptr<IViewport> lock(viewport);
-        if (lock)
-        {
-          std::unique_ptr<IViewport::ILock> viewportLock(lock->Lock());
-          return annotations_->CreateTracker(event.GetMainPosition(), viewportLock->GetController().GetScene());
-        }
+        return annotations_->CreateTracker(event.GetMainPosition(), scene);
       }
-
-      return default_.CreateTracker(viewport, event, viewportWidth, viewportHeight);
+      else
+      {
+        return default_.CreateTracker(scene, event, viewportWidth, viewportHeight);
+      }
     }
 
     virtual bool HasMouseHover() const ORTHANC_OVERRIDE
--- a/Applications/StoneWebViewer/WebAssembly/StoneWebViewer.cpp	Tue Oct 06 18:21:55 2026 +0200
+++ b/Applications/StoneWebViewer/WebAssembly/StoneWebViewer.cpp	Tue Oct 06 18:32:31 2026 +0200
@@ -3959,23 +3959,20 @@
       SetGrayscaleWindowingObserverFactory(new GrayscaleFactory(viewer));
     }
 
-    virtual OrthancStone::IFlexiblePointerTracker* CreateTracker(
-      const boost::shared_ptr<OrthancStone::IViewport>& viewport,
-      const OrthancStone::PointerEvent& event,
-      unsigned int viewportWidth,
-      unsigned int viewportHeight) ORTHANC_OVERRIDE
+    virtual OrthancStone::IFlexiblePointerTracker* CreateTracker(OrthancStone::Scene2D& scene,
+                                                                 const OrthancStone::PointerEvent& event,
+                                                                 unsigned int viewportWidth,
+                                                                 unsigned int viewportHeight) ORTHANC_OVERRIDE
     {
       if (IsAction(event, WebViewerAction_Crosshair))
       {
         OrthancStone::CoordinateSystem3D plane;
         if (viewer_.GetCurrentPlane(plane))
         {
-          std::unique_ptr<OrthancStone::IViewport::ILock> viewportLock(viewport->Lock());
-
           const OrthancStone::ScenePoint2D p = event.GetMainPosition();
           double x = p.GetX();
           double y = p.GetY();
-          viewportLock->GetController().GetScene().GetCanvasToSceneTransform().Apply(x, y);
+          scene.GetCanvasToSceneTransform().Apply(x, y);
           
           OrthancStone::Vector click = plane.MapSliceToWorldCoordinates(x, y);
           if (viewer_.observer_.get() != NULL)
@@ -4031,10 +4028,8 @@
           }
 
           {
-            std::unique_ptr<OrthancStone::IViewport::ILock> viewportLock(viewport->Lock());
-
             std::unique_ptr<OrthancStone::IFlexiblePointerTracker> t;
-            t.reset(viewer_.stoneAnnotations_->CreateTracker(event.GetMainPosition(), viewportLock->GetController().GetScene()));
+            t.reset(viewer_.stoneAnnotations_->CreateTracker(event.GetMainPosition(), scene));
 
             if (t.get() != NULL)
             {
@@ -4043,7 +4038,7 @@
           }
         }
 
-        return DefaultViewportInteractor::CreateTracker(viewport, event, viewportWidth, viewportHeight);
+        return DefaultViewportInteractor::CreateTracker(scene, event, viewportWidth, viewportHeight);
       }
     }
 
--- a/OrthancStone/Sources/Scene2DViewport/ViewportController.cpp	Tue Oct 06 18:21:55 2026 +0200
+++ b/OrthancStone/Sources/Scene2DViewport/ViewportController.cpp	Tue Oct 06 18:32:31 2026 +0200
@@ -210,10 +210,11 @@
       }
 
       // No measure tool, create new tracker from the interactor
-      boost::shared_ptr<IViewport> lock(viewport_);
-      if (lock)
+      boost::shared_ptr<IViewport> sharedViewport(viewport_);
+      if (sharedViewport)
       {
-        activeTracker_.reset(interactor.CreateTracker(lock, event, viewportWidth, viewportHeight));
+        std::unique_ptr<IViewport::ILock> lock(sharedViewport->Lock());
+        activeTracker_.reset(interactor.CreateTracker(lock->GetController().GetScene(), event, viewportWidth, viewportHeight));
       }
       else
       {
--- a/OrthancStone/Sources/Viewport/DefaultViewportInteractor.cpp	Tue Oct 06 18:21:55 2026 +0200
+++ b/OrthancStone/Sources/Viewport/DefaultViewportInteractor.cpp	Tue Oct 06 18:32:31 2026 +0200
@@ -87,16 +87,11 @@
 
 
   IFlexiblePointerTracker* DefaultViewportInteractor::CreateTracker(
-    const boost::shared_ptr<IViewport>& viewport,
+    Scene2D& scene,
     const PointerEvent&         event,
     unsigned int                viewportWidth,
     unsigned int                viewportHeight)
   {
-    if (!viewport)
-    {
-      throw Orthanc::OrthancException(Orthanc::ErrorCode_NullPointer);
-    }
-
     MouseAction action;
     
     switch (event.GetMouseButton())
@@ -117,8 +112,7 @@
         if (event.GetPositionsCount() == 1 ||
             event.GetPositionsCount() == 2)
         {
-          std::unique_ptr<IViewport::ILock> lock(viewport->Lock());
-          return new PinchZoomTracker(lock->GetController().GetScene(), event);
+          return new PinchZoomTracker(scene, event);
         }
         else
         {
@@ -129,10 +123,7 @@
         return NULL;
     }
 
-    {
-      std::unique_ptr<IViewport::ILock> lock(viewport->Lock());
-      return CreateTrackerInternal(lock->GetController().GetScene(), action, event, viewportWidth, viewportHeight);
-    }
+    return CreateTrackerInternal(scene, action, event, viewportWidth, viewportHeight);
   }
 
 
--- a/OrthancStone/Sources/Viewport/DefaultViewportInteractor.h	Tue Oct 06 18:21:55 2026 +0200
+++ b/OrthancStone/Sources/Viewport/DefaultViewportInteractor.h	Tue Oct 06 18:32:31 2026 +0200
@@ -95,7 +95,7 @@
       rightButtonAction_ = action;
     }
 
-    virtual IFlexiblePointerTracker* CreateTracker(const boost::shared_ptr<IViewport>& viewport,
+    virtual IFlexiblePointerTracker* CreateTracker(Scene2D& scene,
                                                    const PointerEvent& event,
                                                    unsigned int viewportWidth,
                                                    unsigned int viewportHeight) ORTHANC_OVERRIDE;
--- a/OrthancStone/Sources/Viewport/IViewportInteractor.h	Tue Oct 06 18:21:55 2026 +0200
+++ b/OrthancStone/Sources/Viewport/IViewportInteractor.h	Tue Oct 06 18:32:31 2026 +0200
@@ -34,7 +34,7 @@
     {
     }
 
-    virtual IFlexiblePointerTracker* CreateTracker(const boost::shared_ptr<IViewport>& viewport,  // TODO Refactoring - Why not reference here?
+    virtual IFlexiblePointerTracker* CreateTracker(Scene2D& scene,
                                                    const PointerEvent& event,
                                                    unsigned int viewportWidth,
                                                    unsigned int viewportHeight) = 0;