Mercurial > hg > orthanc-stone
diff OrthancStone/Sources/Scene2D/RotateSceneTracker.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/RotateSceneTracker.cpp Fri Oct 28 13:38:19 2022 +0200 +++ b/OrthancStone/Sources/Scene2D/RotateSceneTracker.cpp Fri Oct 28 16:21:28 2022 +0200 @@ -21,57 +21,73 @@ **/ #include "RotateSceneTracker.h" + #include "../Scene2DViewport/ViewportController.h" +#include "../Viewport/ViewportLocker.h" namespace OrthancStone { RotateSceneTracker::RotateSceneTracker(boost::weak_ptr<IViewport> viewport, const PointerEvent& event) : - OneGesturePointerTracker(viewport), + viewport_(viewport), click_(event.GetMainPosition()), - aligner_(viewport, click_), referenceAngle_(0), isFirst_(true) { - std::unique_ptr<IViewport::ILock> lock(GetViewportLock()); - originalSceneToCanvas_ = lock->GetController().GetSceneToCanvasTransform(); + ViewportLocker locker(viewport_); + + if (locker.IsValid()) + { + aligner_.reset(new Internals::FixedPointAligner(locker.GetController(), click_)); + originalSceneToCanvas_ = locker.GetController().GetSceneToCanvasTransform(); + } } - void RotateSceneTracker::PointerMove(const PointerEvent& event) + void RotateSceneTracker::PointerMove(const PointerEvent& event, + const Scene2D& scene) { - ScenePoint2D p = event.GetMainPosition(); - double dx = p.GetX() - click_.GetX(); - double dy = p.GetY() - click_.GetY(); + if (aligner_.get() != NULL) + { + ScenePoint2D p = event.GetMainPosition(); + double dx = p.GetX() - click_.GetX(); + double dy = p.GetY() - click_.GetY(); - if (std::abs(dx) > 5.0 || - std::abs(dy) > 5.0) - { - double a = atan2(dy, dx); - - if (isFirst_) + if (std::abs(dx) > 5.0 || + std::abs(dy) > 5.0) { - referenceAngle_ = a; - isFirst_ = false; - } + double a = atan2(dy, dx); - std::unique_ptr<IViewport::ILock> lock(GetViewportLock()); + if (isFirst_) + { + referenceAngle_ = a; + isFirst_ = false; + } - lock->GetController().SetSceneToCanvasTransform( - AffineTransform2D::Combine( - AffineTransform2D::CreateRotation(a - referenceAngle_), - originalSceneToCanvas_)); - aligner_.Apply(); - lock->Invalidate(); + ViewportLocker locker(viewport_); + + if (locker.IsValid()) + { + locker.GetController().SetSceneToCanvasTransform( + AffineTransform2D::Combine( + AffineTransform2D::CreateRotation(a - referenceAngle_), + originalSceneToCanvas_)); + aligner_->Apply(locker.GetController()); + locker.Invalidate(); + } + } } } void RotateSceneTracker::Cancel() { - // See remark above - 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(); + } } }