comparison 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
comparison
equal deleted inserted replaced
1971:e5b31d55206d 1972:9c0adcc8feec
20 * <http://www.gnu.org/licenses/>. 20 * <http://www.gnu.org/licenses/>.
21 **/ 21 **/
22 22
23 23
24 #include "PanSceneTracker.h" 24 #include "PanSceneTracker.h"
25 #include "../Viewport/IViewport.h" 25
26 #include "../Scene2DViewport/ViewportController.h" 26 #include "../Scene2DViewport/ViewportController.h"
27 27 #include "../Viewport/ViewportLocker.h"
28 #include <memory>
29 28
30 namespace OrthancStone 29 namespace OrthancStone
31 { 30 {
32 PanSceneTracker::PanSceneTracker(boost::weak_ptr<IViewport> viewport, 31 PanSceneTracker::PanSceneTracker(boost::weak_ptr<IViewport> viewport,
33 const PointerEvent& event) 32 const PointerEvent& event) :
34 : OneGesturePointerTracker(viewport) 33 viewport_(viewport)
35 { 34 {
35 ViewportLocker locker(viewport_);
36 36
37 std::unique_ptr<IViewport::ILock> lock(GetViewportLock()); 37 if (locker.IsValid())
38 38 {
39 originalSceneToCanvas_ = lock->GetController().GetSceneToCanvasTransform(); 39 originalSceneToCanvas_ = locker.GetController().GetSceneToCanvasTransform();
40 originalCanvasToScene_ = lock->GetController().GetCanvasToSceneTransform(); 40 originalCanvasToScene_ = locker.GetController().GetCanvasToSceneTransform();
41 41 pivot_ = event.GetMainPosition().Apply(originalCanvasToScene_);
42 pivot_ = event.GetMainPosition().Apply(originalCanvasToScene_); 42 }
43 } 43 }
44 44
45 45
46 void PanSceneTracker::PointerMove(const PointerEvent& event) 46 void PanSceneTracker::PointerMove(const PointerEvent& event,
47 const Scene2D& scene)
47 { 48 {
48 ScenePoint2D p = event.GetMainPosition().Apply(originalCanvasToScene_); 49 ScenePoint2D p = event.GetMainPosition().Apply(originalCanvasToScene_);
49 50
50 std::unique_ptr<IViewport::ILock> lock(GetViewportLock()); 51 ViewportLocker locker(viewport_);
51 52
52 lock->GetController().SetSceneToCanvasTransform( 53 if (locker.IsValid())
53 AffineTransform2D::Combine( 54 {
54 originalSceneToCanvas_, 55 locker.GetController().SetSceneToCanvasTransform(
55 AffineTransform2D::CreateOffset(p.GetX() - pivot_.GetX(), 56 AffineTransform2D::Combine(
56 p.GetY() - pivot_.GetY()))); 57 originalSceneToCanvas_,
57 lock->Invalidate(); 58 AffineTransform2D::CreateOffset(p.GetX() - pivot_.GetX(),
59 p.GetY() - pivot_.GetY())));
60 locker.Invalidate();
61 }
58 } 62 }
59 63
60 void PanSceneTracker::Cancel() 64 void PanSceneTracker::Cancel()
61 { 65 {
62 std::unique_ptr<IViewport::ILock> lock(GetViewportLock()); 66 ViewportLocker locker(viewport_);
63 lock->GetController().SetSceneToCanvasTransform(originalSceneToCanvas_); 67
68 if (locker.IsValid())
69 {
70 locker.GetController().SetSceneToCanvasTransform(originalSceneToCanvas_);
71 }
64 } 72 }
65 } 73 }