Mercurial > hg > orthanc-stone
comparison OrthancStone/Sources/Scene2D/ZoomSceneTracker.cpp @ 1606:874e178f34e9
- ViewportController now has weak ptr to Viewport
- Measuring tools + related commands and all trackers now store only a weak_ptr to the Viewport and lock() on demand for usage
- LayerHolder and FixedPoint aligner store only a weak_ptr to the Viewport, too
- Fixed float/double warning in GrayscaleWindowingSceneTracker
author | Benjamin Golinvaux <bgo@osimis.io> |
---|---|
date | Wed, 28 Oct 2020 20:14:34 +0100 |
parents | 8563ea5d8ae4 |
children | 9ac2a65d4172 |
comparison
equal
deleted
inserted
replaced
1605:b3c439d96d3e | 1606:874e178f34e9 |
---|---|
23 #include "ZoomSceneTracker.h" | 23 #include "ZoomSceneTracker.h" |
24 #include "../Scene2DViewport/ViewportController.h" | 24 #include "../Scene2DViewport/ViewportController.h" |
25 | 25 |
26 namespace OrthancStone | 26 namespace OrthancStone |
27 { | 27 { |
28 ZoomSceneTracker::ZoomSceneTracker(boost::shared_ptr<IViewport> viewport, | 28 ZoomSceneTracker::ZoomSceneTracker(boost::weak_ptr<IViewport> viewport, |
29 const PointerEvent& event, | 29 const PointerEvent& event, |
30 unsigned int canvasHeight) | 30 unsigned int canvasHeight) |
31 : OneGesturePointerTracker(viewport) | 31 : OneGesturePointerTracker(viewport) |
32 , clickY_(event.GetMainPosition().GetY()) | 32 , clickY_(event.GetMainPosition().GetY()) |
33 , aligner_(viewport, event.GetMainPosition()) | 33 , aligner_(viewport, event.GetMainPosition()) |
34 { | 34 { |
35 | 35 |
36 std::unique_ptr<IViewport::ILock> lock(viewport_->Lock()); | 36 std::unique_ptr<IViewport::ILock> lock(GetViewportLock()); |
37 originalSceneToCanvas_ = lock->GetController().GetSceneToCanvasTransform(); | 37 originalSceneToCanvas_ = lock->GetController().GetSceneToCanvasTransform(); |
38 | 38 |
39 if (canvasHeight <= 3) | 39 if (canvasHeight <= 3) |
40 { | 40 { |
41 active_ = false; | 41 active_ = false; |
75 z = MIN_ZOOM + (MAX_ZOOM - MIN_ZOOM) * (dy + 1.0) / 2.0; | 75 z = MIN_ZOOM + (MAX_ZOOM - MIN_ZOOM) * (dy + 1.0) / 2.0; |
76 } | 76 } |
77 | 77 |
78 double zoom = pow(2.0, z); | 78 double zoom = pow(2.0, z); |
79 | 79 |
80 std::unique_ptr<IViewport::ILock> lock(viewport_->Lock()); | 80 std::unique_ptr<IViewport::ILock> lock(GetViewportLock()); |
81 lock->GetController().SetSceneToCanvasTransform( | 81 lock->GetController().SetSceneToCanvasTransform( |
82 AffineTransform2D::Combine( | 82 AffineTransform2D::Combine( |
83 AffineTransform2D::CreateScaling(zoom, zoom), | 83 AffineTransform2D::CreateScaling(zoom, zoom), |
84 originalSceneToCanvas_)); | 84 originalSceneToCanvas_)); |
85 aligner_.Apply(); | 85 aligner_.Apply(); |
87 } | 87 } |
88 } | 88 } |
89 | 89 |
90 void ZoomSceneTracker::Cancel() | 90 void ZoomSceneTracker::Cancel() |
91 { | 91 { |
92 std::unique_ptr<IViewport::ILock> lock(viewport_->Lock()); | 92 std::unique_ptr<IViewport::ILock> lock(GetViewportLock()); |
93 lock->GetController().SetSceneToCanvasTransform(originalSceneToCanvas_); | 93 lock->GetController().SetSceneToCanvasTransform(originalSceneToCanvas_); |
94 lock->Invalidate(); | 94 lock->Invalidate(); |
95 } | 95 } |
96 } | 96 } |