Mercurial > hg > orthanc-stone
changeset 2345:88b6e1c19d03 refactoring
simplified MagnifyingGlassTracker and ZoomSceneTracker
| author | Sebastien Jodogne <s.jodogne@gmail.com> |
|---|---|
| date | Tue, 06 Oct 2026 15:58:35 +0200 |
| parents | dbba1b96b35a |
| children | aa15732517f6 |
| files | OrthancStone/Sources/Scene2D/MagnifyingGlassTracker.cpp OrthancStone/Sources/Scene2D/MagnifyingGlassTracker.h OrthancStone/Sources/Scene2D/ZoomSceneTracker.cpp OrthancStone/Sources/Scene2D/ZoomSceneTracker.h OrthancStone/Sources/Viewport/DefaultViewportInteractor.cpp |
| diffstat | 5 files changed, 46 insertions(+), 91 deletions(-) [+] |
line wrap: on
line diff
--- a/OrthancStone/Sources/Scene2D/MagnifyingGlassTracker.cpp Tue Oct 06 15:42:43 2026 +0200 +++ b/OrthancStone/Sources/Scene2D/MagnifyingGlassTracker.cpp Tue Oct 06 15:58:35 2026 +0200 @@ -23,41 +23,30 @@ #include "MagnifyingGlassTracker.h" -#include "../Scene2DViewport/ViewportController.h" -#include "../Viewport/ViewportLocker.h" - namespace OrthancStone { - void MagnifyingGlassTracker::Update(const ViewportLocker& locker, + void MagnifyingGlassTracker::Update(Scene2D& scene, const PointerEvent& event) { ScenePoint2D p = event.GetMainPosition().Apply(originalCanvasToScene_); - locker.GetController().SetSceneToCanvasTransform( + scene.SetSceneToCanvasTransform( AffineTransform2D::Combine( originalSceneToCanvas_, AffineTransform2D::CreateOffset(p.GetX(), p.GetY()), AffineTransform2D::CreateScaling(5, 5), AffineTransform2D::CreateOffset(-pivot_.GetX(), -pivot_.GetY()))); - - locker.Invalidate(); } - MagnifyingGlassTracker::MagnifyingGlassTracker(boost::weak_ptr<IViewport> viewport, - const PointerEvent& event) : - viewport_(viewport) + MagnifyingGlassTracker::MagnifyingGlassTracker(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(locker.GetController().GetScene().GetCanvasToSceneTransform()); + originalSceneToCanvas_ = scene.GetSceneToCanvasTransform(); + originalCanvasToScene_ = scene.GetCanvasToSceneTransform(); + pivot_ = event.GetMainPosition().Apply(scene.GetCanvasToSceneTransform()); - Update(locker, event); - } + Update(scene, event); } @@ -72,28 +61,13 @@ bool MagnifyingGlassTracker::PointerMove(const PointerEvent& event, Scene2D& scene) { - ViewportLocker locker(viewport_); - - if (locker.IsValid()) - { - Update(locker, event); - return true; - } - else - { - return false; - } + Update(scene, event); + return true; } void MagnifyingGlassTracker::Cancel(Scene2D& scene) { - ViewportLocker locker(viewport_); - - if (locker.IsValid()) - { - locker.GetController().SetSceneToCanvasTransform(originalSceneToCanvas_); - locker.Invalidate(); - } + scene.SetSceneToCanvasTransform(originalSceneToCanvas_); } }
--- a/OrthancStone/Sources/Scene2D/MagnifyingGlassTracker.h Tue Oct 06 15:42:43 2026 +0200 +++ b/OrthancStone/Sources/Scene2D/MagnifyingGlassTracker.h Tue Oct 06 15:58:35 2026 +0200 @@ -23,26 +23,24 @@ #pragma once +#include "../Scene2D/Scene2D.h" #include "../Scene2DViewport/OneGesturePointerTracker.h" -#include "../Viewport/ViewportLocker.h" -#include <boost/weak_ptr.hpp> namespace OrthancStone { class MagnifyingGlassTracker : public OneGesturePointerTracker { private: - boost::weak_ptr<IViewport> viewport_; - ScenePoint2D pivot_; - AffineTransform2D originalSceneToCanvas_; - AffineTransform2D originalCanvasToScene_; + ScenePoint2D pivot_; + AffineTransform2D originalSceneToCanvas_; + AffineTransform2D originalCanvasToScene_; - void Update(const ViewportLocker& locker, + void Update(Scene2D& scene, const PointerEvent& event); public: - MagnifyingGlassTracker(boost::weak_ptr<IViewport> viewport, + MagnifyingGlassTracker(Scene2D& scene, const PointerEvent& event); virtual void PointerUp(const PointerEvent& event,
--- a/OrthancStone/Sources/Scene2D/ZoomSceneTracker.cpp Tue Oct 06 15:42:43 2026 +0200 +++ b/OrthancStone/Sources/Scene2D/ZoomSceneTracker.cpp Tue Oct 06 15:58:35 2026 +0200 @@ -23,31 +23,24 @@ #include "ZoomSceneTracker.h" -#include "../Scene2DViewport/ViewportController.h" -#include "../Viewport/ViewportLocker.h" namespace OrthancStone { - ZoomSceneTracker::ZoomSceneTracker(boost::weak_ptr<IViewport> viewport, + ZoomSceneTracker::ZoomSceneTracker(const Scene2D& scene, const PointerEvent& event, unsigned int canvasHeight) : - viewport_(viewport), clickY_(event.GetMainPosition().GetY()) - { - ViewportLocker locker(viewport_); - - if (locker.IsValid()) + { + originalSceneToCanvas_ = scene.GetSceneToCanvasTransform(); + + if (canvasHeight > 3) { - originalSceneToCanvas_ = locker.GetController().GetScene().GetSceneToCanvasTransform(); - - if (canvasHeight > 3) - { - normalization_ = 1.0 / static_cast<double>(canvasHeight - 1); - aligner_.reset(new Internals::FixedPointAligner(locker.GetController().GetScene(), event.GetMainPosition())); - } + normalization_ = 1.0 / static_cast<double>(canvasHeight - 1); + aligner_.reset(new Internals::FixedPointAligner(scene, event.GetMainPosition())); } } + bool ZoomSceneTracker::PointerMove(const PointerEvent& event, Scene2D& scene) { @@ -77,33 +70,21 @@ z = MIN_ZOOM + (MAX_ZOOM - MIN_ZOOM) * (dy + 1.0) / 2.0; } - ViewportLocker locker(viewport_); - - if (locker.IsValid()) - { - const double zoom = pow(2.0, z); + const double zoom = pow(2.0, z); - locker.GetController().SetSceneToCanvasTransform( - AffineTransform2D::Combine( - AffineTransform2D::CreateScaling(zoom, zoom), - originalSceneToCanvas_)); - aligner_->Apply(locker.GetController().GetScene()); - locker.Invalidate(); - return true; - } + scene.SetSceneToCanvasTransform(AffineTransform2D::Combine( + AffineTransform2D::CreateScaling(zoom, zoom), + originalSceneToCanvas_)); + aligner_->Apply(scene); + return true; } return false; } + void ZoomSceneTracker::Cancel(Scene2D& scene) { - ViewportLocker locker(viewport_); - - if (locker.IsValid()) - { - locker.GetController().SetSceneToCanvasTransform(originalSceneToCanvas_); - locker.Invalidate(); - } + scene.SetSceneToCanvasTransform(originalSceneToCanvas_); } }
--- a/OrthancStone/Sources/Scene2D/ZoomSceneTracker.h Tue Oct 06 15:42:43 2026 +0200 +++ b/OrthancStone/Sources/Scene2D/ZoomSceneTracker.h Tue Oct 06 15:58:35 2026 +0200 @@ -25,25 +25,21 @@ #include "../Scene2DViewport/OneGesturePointerTracker.h" -#include "../Viewport/IViewport.h" #include "Internals/FixedPointAligner.h" -#include <boost/weak_ptr.hpp> - namespace OrthancStone { class ZoomSceneTracker : public OneGesturePointerTracker { private: - boost::weak_ptr<IViewport> viewport_; - double clickY_; - double normalization_; - AffineTransform2D originalSceneToCanvas_; + double clickY_; + double normalization_; + AffineTransform2D originalSceneToCanvas_; std::unique_ptr<Internals::FixedPointAligner> aligner_; public: - ZoomSceneTracker(boost::weak_ptr<IViewport> viewport, + ZoomSceneTracker(const Scene2D& scene, const PointerEvent& event, unsigned int canvasHeight);
--- a/OrthancStone/Sources/Viewport/DefaultViewportInteractor.cpp Tue Oct 06 15:42:43 2026 +0200 +++ b/OrthancStone/Sources/Viewport/DefaultViewportInteractor.cpp Tue Oct 06 15:58:35 2026 +0200 @@ -36,7 +36,7 @@ namespace OrthancStone { IFlexiblePointerTracker* DefaultViewportInteractor::CreateTrackerInternal( - const boost::shared_ptr<IViewport>& viewport, + const boost::shared_ptr<IViewport>& viewport, // TODO Refactoring - Should be Scene2D& MouseAction action, const PointerEvent& event, unsigned int viewportWidth, @@ -77,10 +77,16 @@ return new PanSceneTracker(viewport, event); case MouseAction_Zoom: - return new ZoomSceneTracker(viewport, event, viewportHeight); + { + std::unique_ptr<IViewport::ILock> lock(viewport->Lock()); + return new ZoomSceneTracker(lock->GetController().GetScene(), event, viewportHeight); + } case MouseAction_MagnifyingGlass: - return new MagnifyingGlassTracker(viewport, event); + { + std::unique_ptr<IViewport::ILock> lock(viewport->Lock()); + return new MagnifyingGlassTracker(lock->GetController().GetScene(), event); + } default: throw Orthanc::OrthancException(Orthanc::ErrorCode_ParameterOutOfRange);
