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 {