comparison Framework/Scene2DViewport/CreateLineMeasureTracker.cpp @ 1305:a5326ce4f24b broker

Trackers and measuring tools now use the viewport instead of ViewportController, so that proper locks can be used
author Benjamin Golinvaux <bgo@osimis.io>
date Wed, 04 Mar 2020 09:45:38 +0100
parents 7ec8fea061b9
children ab81ee8fce1f
comparison
equal deleted inserted replaced
1304:b7fa67bf87fa 1305:a5326ce4f24b
24 #include <Core/OrthancException.h> 24 #include <Core/OrthancException.h>
25 25
26 namespace OrthancStone 26 namespace OrthancStone
27 { 27 {
28 CreateLineMeasureTracker::CreateLineMeasureTracker( 28 CreateLineMeasureTracker::CreateLineMeasureTracker(
29 boost::weak_ptr<ViewportController> controllerW, 29 IViewport& viewport,
30 const PointerEvent& e) 30 const PointerEvent& e)
31 : CreateMeasureTracker(controllerW) 31 : CreateMeasureTracker(viewport)
32 { 32 {
33 ScenePoint2D point = e.GetMainPosition(); 33 ScenePoint2D point = e.GetMainPosition();
34
35 { 34 {
36 boost::shared_ptr<ViewportController> controller = controllerW.lock(); 35 std::unique_ptr<IViewport::ILock> lock(viewport_.Lock());
37 if (controller) 36 ViewportController& controller = lock->GetController();
38 { 37 point = e.GetMainPosition().Apply(controller.GetScene().GetCanvasToSceneTransform());
39 point = e.GetMainPosition().Apply(controller->GetScene().GetCanvasToSceneTransform());
40 }
41 } 38 }
42 39 command_.reset(new CreateLineMeasureCommand(viewport, point));
43 command_.reset(new CreateLineMeasureCommand(controllerW, point));
44 } 40 }
45 41
46 CreateLineMeasureTracker::~CreateLineMeasureTracker() 42 CreateLineMeasureTracker::~CreateLineMeasureTracker()
47 { 43 {
48 44
55 throw Orthanc::OrthancException(Orthanc::ErrorCode_InternalError, 51 throw Orthanc::OrthancException(Orthanc::ErrorCode_InternalError,
56 "Internal error: wrong state in CreateLineMeasureTracker::" 52 "Internal error: wrong state in CreateLineMeasureTracker::"
57 "PointerMove: active_ == false"); 53 "PointerMove: active_ == false");
58 } 54 }
59 55
60 boost::shared_ptr<ViewportController> controller = controllerW_.lock(); 56 std::unique_ptr<IViewport::ILock> lock(viewport_.Lock());
61 if (controller) 57 ViewportController& controller = lock->GetController();
62 { 58
63 ScenePoint2D scenePos = event.GetMainPosition().Apply( 59 ScenePoint2D scenePos = event.GetMainPosition().Apply(
64 controller->GetScene().GetCanvasToSceneTransform()); 60 controller.GetScene().GetCanvasToSceneTransform());
65 61
66 //LOG(TRACE) << "scenePos.GetX() = " << scenePos.GetX() << " " << 62 //LOG(TRACE) << "scenePos.GetX() = " << scenePos.GetX() << " " <<
67 // "scenePos.GetY() = " << scenePos.GetY(); 63 // "scenePos.GetY() = " << scenePos.GetY();
68 64
69 CreateLineMeasureTracker* concreteThis = 65 CreateLineMeasureTracker* concreteThis =
70 dynamic_cast<CreateLineMeasureTracker*>(this); 66 dynamic_cast<CreateLineMeasureTracker*>(this);
71 assert(concreteThis != NULL); 67 assert(concreteThis != NULL);
72 GetCommand()->SetEnd(scenePos); 68 GetCommand()->SetEnd(scenePos);
73 }
74 } 69 }
75 70
76 void CreateLineMeasureTracker::PointerUp(const PointerEvent& e) 71 void CreateLineMeasureTracker::PointerUp(const PointerEvent& e)
77 { 72 {
78 // TODO: the current app does not prevent multiple PointerDown AND 73 // TODO: the current app does not prevent multiple PointerDown AND