Mercurial > hg > orthanc-stone
diff OrthancStone/Sources/Scene2D/ZoomSceneTracker.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/ZoomSceneTracker.cpp Fri Oct 28 13:38:19 2022 +0200 +++ b/OrthancStone/Sources/Scene2D/ZoomSceneTracker.cpp Fri Oct 28 16:21:28 2022 +0200 @@ -22,38 +22,39 @@ #include "ZoomSceneTracker.h" + #include "../Scene2DViewport/ViewportController.h" +#include "../Viewport/ViewportLocker.h" namespace OrthancStone { ZoomSceneTracker::ZoomSceneTracker(boost::weak_ptr<IViewport> viewport, const PointerEvent& event, - unsigned int canvasHeight) - : OneGesturePointerTracker(viewport) - , clickY_(event.GetMainPosition().GetY()) - , aligner_(viewport, event.GetMainPosition()) - { + unsigned int canvasHeight) : + viewport_(viewport), + clickY_(event.GetMainPosition().GetY()) + { + ViewportLocker locker(viewport_); - std::unique_ptr<IViewport::ILock> lock(GetViewportLock()); - originalSceneToCanvas_ = lock->GetController().GetSceneToCanvasTransform(); + if (locker.IsValid()) + { + originalSceneToCanvas_ = locker.GetController().GetSceneToCanvasTransform(); - if (canvasHeight <= 3) - { - active_ = false; - } - else - { - normalization_ = 1.0 / static_cast<double>(canvasHeight - 1); - active_ = true; + if (canvasHeight > 3) + { + normalization_ = 1.0 / static_cast<double>(canvasHeight - 1); + aligner_.reset(new Internals::FixedPointAligner(locker.GetController(), event.GetMainPosition())); + } } } - void ZoomSceneTracker::PointerMove(const PointerEvent& event) + void ZoomSceneTracker::PointerMove(const PointerEvent& event, + const Scene2D& scene) { static const double MIN_ZOOM = -4; static const double MAX_ZOOM = 4; - if (active_) + if (aligner_.get() != NULL) { double y = event.GetMainPosition().GetY(); @@ -78,20 +79,28 @@ double zoom = pow(2.0, z); - std::unique_ptr<IViewport::ILock> lock(GetViewportLock()); - lock->GetController().SetSceneToCanvasTransform( - AffineTransform2D::Combine( - AffineTransform2D::CreateScaling(zoom, zoom), - originalSceneToCanvas_)); - aligner_.Apply(); - lock->Invalidate(); + ViewportLocker locker(viewport_); + + if (locker.IsValid()) + { + locker.GetController().SetSceneToCanvasTransform( + AffineTransform2D::Combine( + AffineTransform2D::CreateScaling(zoom, zoom), + originalSceneToCanvas_)); + aligner_->Apply(locker.GetController()); + locker.Invalidate(); + } } } void ZoomSceneTracker::Cancel() { - std::unique_ptr<IViewport::ILock> lock(GetViewportLock()); - lock->GetController().SetSceneToCanvasTransform(originalSceneToCanvas_); - lock->Invalidate(); + ViewportLocker locker(viewport_); + + if (locker.IsValid()) + { + locker.GetController().SetSceneToCanvasTransform(originalSceneToCanvas_); + locker.Invalidate(); + } } }