comparison Framework/Scene2DViewport/CreateAngleMeasureTracker.cpp @ 1203:f3bb9a6dd949 broker

locking abstraction in IViewport
author Sebastien Jodogne <s.jodogne@gmail.com>
date Fri, 29 Nov 2019 21:22:21 +0100
parents e146743f6cdc
children 86a8266b8888
comparison
equal deleted inserted replaced
1200:54cbffabdc45 1203:f3bb9a6dd949
29 boost::weak_ptr<ViewportController> controllerW, 29 boost::weak_ptr<ViewportController> controllerW,
30 const PointerEvent& e) 30 const PointerEvent& e)
31 : CreateMeasureTracker(controllerW) 31 : CreateMeasureTracker(controllerW)
32 , state_(CreatingSide1) 32 , state_(CreatingSide1)
33 { 33 {
34 command_.reset( 34 ScenePoint2D point = e.GetMainPosition();
35 new CreateAngleMeasureCommand( 35
36 controllerW, 36 {
37 e.GetMainPosition().Apply(GetScene().GetCanvasToSceneTransform()))); 37 boost::shared_ptr<ViewportController> controller = controllerW.lock();
38 if (controller)
39 {
40 std::auto_ptr<IViewport::ILock> lock(controller->GetViewport().Lock());
41 point = e.GetMainPosition().Apply(lock->GetScene().GetCanvasToSceneTransform());
42 }
43 }
44
45 command_.reset(new CreateAngleMeasureCommand(controllerW, point));
38 } 46 }
39 47
40 CreateAngleMeasureTracker::~CreateAngleMeasureTracker() 48 CreateAngleMeasureTracker::~CreateAngleMeasureTracker()
41 { 49 {
42 } 50 }
48 throw Orthanc::OrthancException(Orthanc::ErrorCode_InternalError, 56 throw Orthanc::OrthancException(Orthanc::ErrorCode_InternalError,
49 "Internal error: wrong state in CreateAngleMeasureTracker::" 57 "Internal error: wrong state in CreateAngleMeasureTracker::"
50 "PointerMove: active_ == false"); 58 "PointerMove: active_ == false");
51 } 59 }
52 60
53 ScenePoint2D scenePos = event.GetMainPosition().Apply( 61 boost::shared_ptr<ViewportController> controller = controllerW_.lock();
54 GetScene().GetCanvasToSceneTransform()); 62 if (controller)
63 {
64 std::auto_ptr<IViewport::ILock> lock(controller->GetViewport().Lock());
65 ScenePoint2D scenePos = event.GetMainPosition().Apply(
66 lock->GetScene().GetCanvasToSceneTransform());
55 67
56 switch (state_) 68 switch (state_)
57 { 69 {
58 case CreatingSide1: 70 case CreatingSide1:
59 GetCommand()->SetCenter(scenePos); 71 GetCommand()->SetCenter(scenePos);
60 break; 72 break;
61 case CreatingSide2: 73 case CreatingSide2:
62 GetCommand()->SetSide2End(scenePos); 74 GetCommand()->SetSide2End(scenePos);
63 break; 75 break;
64 default: 76 default:
65 throw Orthanc::OrthancException(Orthanc::ErrorCode_InternalError, 77 throw Orthanc::OrthancException(Orthanc::ErrorCode_InternalError,
66 "Wrong state in CreateAngleMeasureTracker::" 78 "Wrong state in CreateAngleMeasureTracker::"
67 "PointerMove: state_ invalid"); 79 "PointerMove: state_ invalid");
80 }
81 //LOG(TRACE) << "scenePos.GetX() = " << scenePos.GetX() << " " <<
82 // "scenePos.GetY() = " << scenePos.GetY();
68 } 83 }
69 //LOG(TRACE) << "scenePos.GetX() = " << scenePos.GetX() << " " <<
70 // "scenePos.GetY() = " << scenePos.GetY();
71 } 84 }
72 85
73 void CreateAngleMeasureTracker::PointerUp(const PointerEvent& e) 86 void CreateAngleMeasureTracker::PointerUp(const PointerEvent& e)
74 { 87 {
75 // TODO: the current app does not prevent multiple PointerDown AND 88 // TODO: the current app does not prevent multiple PointerDown AND