diff OrthancStone/Sources/Scene2D/PanSceneTracker.cpp @ 1972:9c0adcc8feec

refactoring to simplify OneGesturePointerTracker
author Sebastien Jodogne <s.jodogne@gmail.com>
date Fri, 28 Oct 2022 16:21:28 +0200
parents 7053b8a0aaec
children 5a434f5889f8
line wrap: on
line diff
--- a/OrthancStone/Sources/Scene2D/PanSceneTracker.cpp	Fri Oct 28 13:38:19 2022 +0200
+++ b/OrthancStone/Sources/Scene2D/PanSceneTracker.cpp	Fri Oct 28 16:21:28 2022 +0200
@@ -22,44 +22,52 @@
 
 
 #include "PanSceneTracker.h"
-#include "../Viewport/IViewport.h"
+
 #include "../Scene2DViewport/ViewportController.h"
-
-#include <memory>
+#include "../Viewport/ViewportLocker.h"
 
 namespace OrthancStone
 {
   PanSceneTracker::PanSceneTracker(boost::weak_ptr<IViewport> viewport,
-                                   const PointerEvent& event)
-    : OneGesturePointerTracker(viewport)
+                                   const PointerEvent& event) :
+    viewport_(viewport)
   {
+    ViewportLocker locker(viewport_);
     
-    std::unique_ptr<IViewport::ILock> lock(GetViewportLock());
-
-    originalSceneToCanvas_ = lock->GetController().GetSceneToCanvasTransform();
-    originalCanvasToScene_ = lock->GetController().GetCanvasToSceneTransform();
-
-    pivot_ = event.GetMainPosition().Apply(originalCanvasToScene_);
+    if (locker.IsValid())
+    {
+      originalSceneToCanvas_ = locker.GetController().GetSceneToCanvasTransform();
+      originalCanvasToScene_ = locker.GetController().GetCanvasToSceneTransform();
+      pivot_ = event.GetMainPosition().Apply(originalCanvasToScene_);
+    }
   }
 
 
-  void PanSceneTracker::PointerMove(const PointerEvent& event)
+  void PanSceneTracker::PointerMove(const PointerEvent& event,
+                                    const Scene2D& scene)
   {
     ScenePoint2D p = event.GetMainPosition().Apply(originalCanvasToScene_);
 
-    std::unique_ptr<IViewport::ILock> lock(GetViewportLock());
-
-    lock->GetController().SetSceneToCanvasTransform(
-      AffineTransform2D::Combine(
-        originalSceneToCanvas_,
-        AffineTransform2D::CreateOffset(p.GetX() - pivot_.GetX(),
-                                        p.GetY() - pivot_.GetY())));
-    lock->Invalidate();
+    ViewportLocker locker(viewport_);
+    
+    if (locker.IsValid())
+    {
+      locker.GetController().SetSceneToCanvasTransform(
+        AffineTransform2D::Combine(
+          originalSceneToCanvas_,
+          AffineTransform2D::CreateOffset(p.GetX() - pivot_.GetX(),
+                                          p.GetY() - pivot_.GetY())));
+      locker.Invalidate();
+    }
   }
 
   void PanSceneTracker::Cancel()
   {
-    std::unique_ptr<IViewport::ILock> lock(GetViewportLock());
-    lock->GetController().SetSceneToCanvasTransform(originalSceneToCanvas_);
+    ViewportLocker locker(viewport_);
+    
+    if (locker.IsValid())
+    {
+      locker.GetController().SetSceneToCanvasTransform(originalSceneToCanvas_);
+    }
   }
 }