Mercurial > hg > orthanc-stone
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 } |