comparison Framework/Scene2DViewport/CreateLineMeasureTracker.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
28 CreateLineMeasureTracker::CreateLineMeasureTracker( 28 CreateLineMeasureTracker::CreateLineMeasureTracker(
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 { 32 {
33 command_.reset( 33 ScenePoint2D point = e.GetMainPosition();
34 new CreateLineMeasureCommand( 34
35 controllerW, 35 {
36 e.GetMainPosition().Apply(GetScene().GetCanvasToSceneTransform()))); 36 boost::shared_ptr<ViewportController> controller = controllerW.lock();
37 if (controller)
38 {
39 std::auto_ptr<IViewport::ILock> lock(controller->GetViewport().Lock());
40 point = e.GetMainPosition().Apply(lock->GetScene().GetCanvasToSceneTransform());
41 }
42 }
43
44 command_.reset(new CreateLineMeasureCommand(controllerW, point));
37 } 45 }
38 46
39 CreateLineMeasureTracker::~CreateLineMeasureTracker() 47 CreateLineMeasureTracker::~CreateLineMeasureTracker()
40 { 48 {
41 49
48 throw Orthanc::OrthancException(Orthanc::ErrorCode_InternalError, 56 throw Orthanc::OrthancException(Orthanc::ErrorCode_InternalError,
49 "Internal error: wrong state in CreateLineMeasureTracker::" 57 "Internal error: wrong state in CreateLineMeasureTracker::"
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)
55 63 {
56 //LOG(TRACE) << "scenePos.GetX() = " << scenePos.GetX() << " " << 64 std::auto_ptr<IViewport::ILock> lock(controller->GetViewport().Lock());
57 // "scenePos.GetY() = " << scenePos.GetY(); 65 ScenePoint2D scenePos = event.GetMainPosition().Apply(
58 66 lock->GetScene().GetCanvasToSceneTransform());
59 CreateLineMeasureTracker* concreteThis = 67
60 dynamic_cast<CreateLineMeasureTracker*>(this); 68 //LOG(TRACE) << "scenePos.GetX() = " << scenePos.GetX() << " " <<
61 assert(concreteThis != NULL); 69 // "scenePos.GetY() = " << scenePos.GetY();
62 GetCommand()->SetEnd(scenePos); 70
71 CreateLineMeasureTracker* concreteThis =
72 dynamic_cast<CreateLineMeasureTracker*>(this);
73 assert(concreteThis != NULL);
74 GetCommand()->SetEnd(scenePos);
75 }
63 } 76 }
64 77
65 void CreateLineMeasureTracker::PointerUp(const PointerEvent& e) 78 void CreateLineMeasureTracker::PointerUp(const PointerEvent& e)
66 { 79 {
67 // TODO: the current app does not prevent multiple PointerDown AND 80 // TODO: the current app does not prevent multiple PointerDown AND