changeset 2346:aa15732517f6 refactoring

simplified PanSceneTracker and RotateSceneTracker
author Sebastien Jodogne <s.jodogne@gmail.com>
date Tue, 06 Oct 2026 17:29:57 +0200
parents 88b6e1c19d03
children b867b9180ac5
files OrthancStone/Sources/Scene2D/PanSceneTracker.cpp OrthancStone/Sources/Scene2D/PanSceneTracker.h OrthancStone/Sources/Scene2D/RotateSceneTracker.cpp OrthancStone/Sources/Scene2D/RotateSceneTracker.h OrthancStone/Sources/Viewport/DefaultViewportInteractor.cpp
diffstat 5 files changed, 42 insertions(+), 77 deletions(-) [+]
line wrap: on
line diff
--- a/OrthancStone/Sources/Scene2D/PanSceneTracker.cpp	Tue Oct 06 15:58:35 2026 +0200
+++ b/OrthancStone/Sources/Scene2D/PanSceneTracker.cpp	Tue Oct 06 17:29:57 2026 +0200
@@ -23,23 +23,15 @@
 
 #include "PanSceneTracker.h"
 
-#include "../Scene2DViewport/ViewportController.h"
-#include "../Viewport/ViewportLocker.h"
 
 namespace OrthancStone
 {
-  PanSceneTracker::PanSceneTracker(boost::weak_ptr<IViewport> viewport,
-                                   const PointerEvent& event) :
-    viewport_(viewport)
+  PanSceneTracker::PanSceneTracker(const Scene2D& scene,
+                                   const PointerEvent& event)
   {
-    ViewportLocker locker(viewport_);
-    
-    if (locker.IsValid())
-    {
-      originalSceneToCanvas_ = locker.GetController().GetScene().GetSceneToCanvasTransform();
-      originalCanvasToScene_ = locker.GetController().GetScene().GetCanvasToSceneTransform();
-      pivot_ = event.GetMainPosition().Apply(originalCanvasToScene_);
-    }
+    originalSceneToCanvas_ = scene.GetSceneToCanvasTransform();
+    originalCanvasToScene_ = scene.GetCanvasToSceneTransform();
+    pivot_ = event.GetMainPosition().Apply(originalCanvasToScene_);
   }
 
 
@@ -48,29 +40,17 @@
   {
     ScenePoint2D p = event.GetMainPosition().Apply(originalCanvasToScene_);
 
-    ViewportLocker locker(viewport_);
-    
-    if (locker.IsValid())
-    {
-      locker.GetController().SetSceneToCanvasTransform(
-        AffineTransform2D::Combine(
-          originalSceneToCanvas_,
-          AffineTransform2D::CreateOffset(p.GetX() - pivot_.GetX(),
-                                          p.GetY() - pivot_.GetY())));
-      locker.Invalidate();
-      return true;
-    }
+    scene.SetSceneToCanvasTransform(
+      AffineTransform2D::Combine(
+        originalSceneToCanvas_,
+        AffineTransform2D::CreateOffset(p.GetX() - pivot_.GetX(),
+                                        p.GetY() - pivot_.GetY())));
+    return true;
+  }
 
-    return false;
-  }
 
   void PanSceneTracker::Cancel(Scene2D& scene)
   {
-    ViewportLocker locker(viewport_);
-    
-    if (locker.IsValid())
-    {
-      locker.GetController().SetSceneToCanvasTransform(originalSceneToCanvas_);
-    }
+    scene.SetSceneToCanvasTransform(originalSceneToCanvas_);
   }
 }
--- a/OrthancStone/Sources/Scene2D/PanSceneTracker.h	Tue Oct 06 15:58:35 2026 +0200
+++ b/OrthancStone/Sources/Scene2D/PanSceneTracker.h	Tue Oct 06 17:29:57 2026 +0200
@@ -23,6 +23,7 @@
 
 #pragma once
 
+#include "../Scene2D/Scene2D.h"
 #include "../Scene2DViewport/OneGesturePointerTracker.h"
 
 namespace OrthancStone
@@ -30,13 +31,12 @@
   class PanSceneTracker : public OneGesturePointerTracker
   {
   private:
-    boost::weak_ptr<IViewport> viewport_;
-    ScenePoint2D               pivot_;
-    AffineTransform2D          originalSceneToCanvas_;
-    AffineTransform2D          originalCanvasToScene_;
+    ScenePoint2D       pivot_;
+    AffineTransform2D  originalSceneToCanvas_;
+    AffineTransform2D  originalCanvasToScene_;
 
   public:
-    PanSceneTracker(boost::weak_ptr<IViewport> viewport,
+    PanSceneTracker(const Scene2D& scene,
                     const PointerEvent& event);
 
     virtual void Cancel(Scene2D& scene) ORTHANC_OVERRIDE;
--- a/OrthancStone/Sources/Scene2D/RotateSceneTracker.cpp	Tue Oct 06 15:58:35 2026 +0200
+++ b/OrthancStone/Sources/Scene2D/RotateSceneTracker.cpp	Tue Oct 06 17:29:57 2026 +0200
@@ -20,27 +20,19 @@
  * <http://www.gnu.org/licenses/>.
  **/
 
+
 #include "RotateSceneTracker.h"
 
-#include "../Scene2DViewport/ViewportController.h"
-#include "../Viewport/ViewportLocker.h"
-
 namespace OrthancStone
 {
-  RotateSceneTracker::RotateSceneTracker(boost::weak_ptr<IViewport> viewport,
+  RotateSceneTracker::RotateSceneTracker(const Scene2D& scene,
                                          const PointerEvent& event) :
-    viewport_(viewport),
     click_(event.GetMainPosition()),
     referenceAngle_(0),
     isFirst_(true)
   {
-    ViewportLocker locker(viewport_);
-    
-    if (locker.IsValid())
-    {
-      aligner_.reset(new Internals::FixedPointAligner(locker.GetController().GetScene(), click_));
-      originalSceneToCanvas_ = locker.GetController().GetScene().GetSceneToCanvasTransform();
-    }
+    aligner_.reset(new Internals::FixedPointAligner(scene, click_));
+    originalSceneToCanvas_ = scene.GetSceneToCanvasTransform();
   }
 
   
@@ -64,18 +56,11 @@
           isFirst_ = false;
         }
 
-        ViewportLocker locker(viewport_);
-    
-        if (locker.IsValid())
-        {
-          locker.GetController().SetSceneToCanvasTransform(
-            AffineTransform2D::Combine(
-              AffineTransform2D::CreateRotation(a - referenceAngle_),
-              originalSceneToCanvas_));
-          aligner_->Apply(locker.GetController().GetScene());
-          locker.Invalidate();
-          return true;
-        }
+        scene.SetSceneToCanvasTransform(AffineTransform2D::Combine(
+                                          AffineTransform2D::CreateRotation(a - referenceAngle_),
+                                          originalSceneToCanvas_));
+        aligner_->Apply(scene);
+        return true;
       }
     }
 
@@ -85,12 +70,6 @@
   
   void RotateSceneTracker::Cancel(Scene2D& scene)
   {
-    ViewportLocker locker(viewport_);
-    
-    if (locker.IsValid())
-    {
-      locker.GetController().SetSceneToCanvasTransform(originalSceneToCanvas_);
-      locker.Invalidate();
-    }
+    scene.SetSceneToCanvasTransform(originalSceneToCanvas_);
   }
 }
--- a/OrthancStone/Sources/Scene2D/RotateSceneTracker.h	Tue Oct 06 15:58:35 2026 +0200
+++ b/OrthancStone/Sources/Scene2D/RotateSceneTracker.h	Tue Oct 06 17:29:57 2026 +0200
@@ -25,6 +25,7 @@
 
 #include "../Scene2DViewport/OneGesturePointerTracker.h"
 #include "Internals/FixedPointAligner.h"
+
 #include <memory>
 
 namespace OrthancStone
@@ -32,16 +33,15 @@
   class RotateSceneTracker : public OneGesturePointerTracker
   {
   private:
-    boost::weak_ptr<IViewport>   viewport_;
-    ScenePoint2D                 click_;
-    double                       referenceAngle_;
-    bool                         isFirst_;
-    AffineTransform2D            originalSceneToCanvas_;
+    ScenePoint2D       click_;
+    double             referenceAngle_;
+    bool               isFirst_;
+    AffineTransform2D  originalSceneToCanvas_;
 
     std::unique_ptr<Internals::FixedPointAligner>  aligner_;
     
   public:
-    RotateSceneTracker(boost::weak_ptr<IViewport> viewport,
+    RotateSceneTracker(const Scene2D& scene,
                        const PointerEvent& event);
 
     virtual bool PointerMove(const PointerEvent& event,
--- a/OrthancStone/Sources/Viewport/DefaultViewportInteractor.cpp	Tue Oct 06 15:58:35 2026 +0200
+++ b/OrthancStone/Sources/Viewport/DefaultViewportInteractor.cpp	Tue Oct 06 17:29:57 2026 +0200
@@ -48,7 +48,10 @@
         return NULL;
 
       case MouseAction_Rotate:
-        return new RotateSceneTracker(viewport, event);
+      {
+        std::unique_ptr<IViewport::ILock> lock(viewport->Lock());
+        return new RotateSceneTracker(lock->GetController().GetScene(), event);
+      }
 
       case MouseAction_GrayscaleWindowing:
       {
@@ -74,7 +77,10 @@
       }
 
       case MouseAction_Pan:
-        return new PanSceneTracker(viewport, event);
+      {
+        std::unique_ptr<IViewport::ILock> lock(viewport->Lock());
+        return new PanSceneTracker(lock->GetController().GetScene(), event);
+      }
       
       case MouseAction_Zoom:
       {