# HG changeset patch # User Sebastien Jodogne # Date 1791300597 -7200 # Node ID aa15732517f6d139edcca9a3b6872f17aeeceb05 # Parent 88b6e1c19d03712792a3d7c24c2534d1d427df85 simplified PanSceneTracker and RotateSceneTracker diff -r 88b6e1c19d03 -r aa15732517f6 OrthancStone/Sources/Scene2D/PanSceneTracker.cpp --- 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 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_); } } diff -r 88b6e1c19d03 -r aa15732517f6 OrthancStone/Sources/Scene2D/PanSceneTracker.h --- 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 viewport_; - ScenePoint2D pivot_; - AffineTransform2D originalSceneToCanvas_; - AffineTransform2D originalCanvasToScene_; + ScenePoint2D pivot_; + AffineTransform2D originalSceneToCanvas_; + AffineTransform2D originalCanvasToScene_; public: - PanSceneTracker(boost::weak_ptr viewport, + PanSceneTracker(const Scene2D& scene, const PointerEvent& event); virtual void Cancel(Scene2D& scene) ORTHANC_OVERRIDE; diff -r 88b6e1c19d03 -r aa15732517f6 OrthancStone/Sources/Scene2D/RotateSceneTracker.cpp --- 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 @@ * . **/ + #include "RotateSceneTracker.h" -#include "../Scene2DViewport/ViewportController.h" -#include "../Viewport/ViewportLocker.h" - namespace OrthancStone { - RotateSceneTracker::RotateSceneTracker(boost::weak_ptr 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_); } } diff -r 88b6e1c19d03 -r aa15732517f6 OrthancStone/Sources/Scene2D/RotateSceneTracker.h --- 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 namespace OrthancStone @@ -32,16 +33,15 @@ class RotateSceneTracker : public OneGesturePointerTracker { private: - boost::weak_ptr viewport_; - ScenePoint2D click_; - double referenceAngle_; - bool isFirst_; - AffineTransform2D originalSceneToCanvas_; + ScenePoint2D click_; + double referenceAngle_; + bool isFirst_; + AffineTransform2D originalSceneToCanvas_; std::unique_ptr aligner_; public: - RotateSceneTracker(boost::weak_ptr viewport, + RotateSceneTracker(const Scene2D& scene, const PointerEvent& event); virtual bool PointerMove(const PointerEvent& event, diff -r 88b6e1c19d03 -r aa15732517f6 OrthancStone/Sources/Viewport/DefaultViewportInteractor.cpp --- 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 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 lock(viewport->Lock()); + return new PanSceneTracker(lock->GetController().GetScene(), event); + } case MouseAction_Zoom: {