Mercurial > hg > orthanc-stone
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 |