Mercurial > hg > orthanc-stone
comparison OrthancStone/Sources/Scene2DViewport/LineMeasureTool.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 |
---|---|
30 #include <boost/make_shared.hpp> | 30 #include <boost/make_shared.hpp> |
31 | 31 |
32 namespace OrthancStone | 32 namespace OrthancStone |
33 { | 33 { |
34 LineMeasureTool::LineMeasureTool( | 34 LineMeasureTool::LineMeasureTool( |
35 boost::shared_ptr<IViewport> viewport): | 35 boost::weak_ptr<IViewport> viewport): |
36 MeasureTool(viewport), | 36 MeasureTool(viewport), |
37 #if ORTHANC_STONE_ENABLE_OUTLINED_TEXT == 1 | 37 #if ORTHANC_STONE_ENABLE_OUTLINED_TEXT == 1 |
38 layerHolder_(boost::shared_ptr<LayerHolder>(new LayerHolder(viewport,1,5))), | 38 layerHolder_(boost::shared_ptr<LayerHolder>(new LayerHolder(viewport,1,5))), |
39 #else | 39 #else |
40 layerHolder_(boost::shared_ptr<LayerHolder>(new LayerHolder(viewport,1,1))), | 40 layerHolder_(boost::shared_ptr<LayerHolder>(new LayerHolder(viewport,1,1))), |
43 lineHighlightArea_(LineHighlightArea_None) | 43 lineHighlightArea_(LineHighlightArea_None) |
44 { | 44 { |
45 | 45 |
46 } | 46 } |
47 | 47 |
48 boost::shared_ptr<LineMeasureTool> LineMeasureTool::Create(boost::shared_ptr<IViewport> viewport) | 48 boost::shared_ptr<LineMeasureTool> LineMeasureTool::Create(boost::weak_ptr<IViewport> viewport) |
49 { | 49 { |
50 boost::shared_ptr<LineMeasureTool> obj(new LineMeasureTool(viewport)); | 50 boost::shared_ptr<LineMeasureTool> obj(new LineMeasureTool(viewport)); |
51 obj->MeasureTool::PostConstructor(); | 51 obj->MeasureTool::PostConstructor(); |
52 obj->RefreshScene(); | 52 obj->RefreshScene(); |
53 return obj; | 53 return obj; |
115 SetLineHighlightArea(lineHighlightArea); | 115 SetLineHighlightArea(lineHighlightArea); |
116 } | 116 } |
117 | 117 |
118 LineMeasureTool::LineHighlightArea LineMeasureTool::LineHitTest(ScenePoint2D p) | 118 LineMeasureTool::LineHighlightArea LineMeasureTool::LineHitTest(ScenePoint2D p) |
119 { | 119 { |
120 std::unique_ptr<IViewport::ILock> lock(viewport_->Lock()); | 120 std::unique_ptr<IViewport::ILock> lock(GetViewportLock()); |
121 ViewportController& controller = lock->GetController(); | 121 ViewportController& controller = lock->GetController(); |
122 const Scene2D& scene = controller.GetScene(); | 122 const Scene2D& scene = controller.GetScene(); |
123 | 123 |
124 const double pixelToScene = scene.GetCanvasToSceneTransform().ComputeZoom(); | 124 const double pixelToScene = scene.GetCanvasToSceneTransform().ComputeZoom(); |
125 const double SQUARED_HIT_TEST_MAX_DISTANCE_SCENE_COORD = | 125 const double SQUARED_HIT_TEST_MAX_DISTANCE_SCENE_COORD = |
151 return LineHitTest(p) != LineHighlightArea_None; | 151 return LineHitTest(p) != LineHighlightArea_None; |
152 } | 152 } |
153 | 153 |
154 boost::shared_ptr<IFlexiblePointerTracker> LineMeasureTool::CreateEditionTracker(const PointerEvent& e) | 154 boost::shared_ptr<IFlexiblePointerTracker> LineMeasureTool::CreateEditionTracker(const PointerEvent& e) |
155 { | 155 { |
156 std::unique_ptr<IViewport::ILock> lock(viewport_->Lock()); | 156 std::unique_ptr<IViewport::ILock> lock(GetViewportLock()); |
157 ViewportController& controller = lock->GetController(); | 157 ViewportController& controller = lock->GetController(); |
158 const Scene2D& scene = controller.GetScene(); | 158 const Scene2D& scene = controller.GetScene(); |
159 | 159 |
160 ScenePoint2D scenePos = e.GetMainPosition().Apply( | 160 ScenePoint2D scenePos = e.GetMainPosition().Apply( |
161 scene.GetCanvasToSceneTransform()); | 161 scene.GetCanvasToSceneTransform()); |
194 if (IsSceneAlive()) | 194 if (IsSceneAlive()) |
195 { | 195 { |
196 if (IsEnabled()) | 196 if (IsEnabled()) |
197 { | 197 { |
198 | 198 |
199 std::unique_ptr<IViewport::ILock> lock(viewport_->Lock()); | 199 std::unique_ptr<IViewport::ILock> lock(GetViewportLock()); |
200 ViewportController& controller = lock->GetController(); | 200 ViewportController& controller = lock->GetController(); |
201 Scene2D& scene = controller.GetScene(); | 201 Scene2D& scene = controller.GetScene(); |
202 | 202 |
203 layerHolder_->CreateLayersIfNeeded(); | 203 layerHolder_->CreateLayersIfNeeded(); |
204 { | 204 { |