Mercurial > hg > orthanc-stone
comparison Framework/Scene2DViewport/CreateAngleMeasureTracker.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 CreateAngleMeasureTracker::CreateAngleMeasureTracker( | 28 CreateAngleMeasureTracker::CreateAngleMeasureTracker( |
29 boost::weak_ptr<ViewportController> controllerW, | 29 IViewport& viewport, |
30 const PointerEvent& e) | 30 const PointerEvent& e) |
31 : CreateMeasureTracker(controllerW) | 31 : CreateMeasureTracker(viewport) |
32 , state_(CreatingSide1) | 32 , state_(CreatingSide1) |
33 { | 33 { |
34 ScenePoint2D point = e.GetMainPosition(); | 34 ScenePoint2D point = e.GetMainPosition(); |
35 | 35 { |
36 { | 36 std::unique_ptr<IViewport::ILock> lock(viewport_.Lock()); |
37 boost::shared_ptr<ViewportController> controller = controllerW.lock(); | 37 Scene2D& scene = lock->GetController().GetScene(); |
38 if (controller) | 38 point = e.GetMainPosition().Apply(scene.GetCanvasToSceneTransform()); |
39 { | |
40 point = e.GetMainPosition().Apply(controller->GetScene().GetCanvasToSceneTransform()); | |
41 } | |
42 } | 39 } |
43 | 40 command_.reset(new CreateAngleMeasureCommand(viewport, point)); |
44 command_.reset(new CreateAngleMeasureCommand(controllerW, point)); | |
45 } | 41 } |
46 | 42 |
47 CreateAngleMeasureTracker::~CreateAngleMeasureTracker() | 43 CreateAngleMeasureTracker::~CreateAngleMeasureTracker() |
48 { | 44 { |
49 } | 45 } |
55 throw Orthanc::OrthancException(Orthanc::ErrorCode_InternalError, | 51 throw Orthanc::OrthancException(Orthanc::ErrorCode_InternalError, |
56 "Internal error: wrong state in CreateAngleMeasureTracker::" | 52 "Internal error: wrong state in CreateAngleMeasureTracker::" |
57 "PointerMove: active_ == false"); | 53 "PointerMove: active_ == false"); |
58 } | 54 } |
59 | 55 |
60 boost::shared_ptr<ViewportController> controller = controllerW_.lock(); | 56 |
61 if (controller) | |
62 { | 57 { |
58 std::unique_ptr<IViewport::ILock> lock(viewport_.Lock()); | |
59 ViewportController& controller = lock->GetController(); | |
60 | |
63 ScenePoint2D scenePos = event.GetMainPosition().Apply( | 61 ScenePoint2D scenePos = event.GetMainPosition().Apply( |
64 controller->GetScene().GetCanvasToSceneTransform()); | 62 controller.GetScene().GetCanvasToSceneTransform()); |
65 | 63 |
66 switch (state_) | 64 switch (state_) |
67 { | 65 { |
68 case CreatingSide1: | 66 case CreatingSide1: |
69 GetCommand()->SetCenter(scenePos); | 67 GetCommand()->SetCenter(scenePos); |
76 "Wrong state in CreateAngleMeasureTracker::" | 74 "Wrong state in CreateAngleMeasureTracker::" |
77 "PointerMove: state_ invalid"); | 75 "PointerMove: state_ invalid"); |
78 } | 76 } |
79 //LOG(TRACE) << "scenePos.GetX() = " << scenePos.GetX() << " " << | 77 //LOG(TRACE) << "scenePos.GetX() = " << scenePos.GetX() << " " << |
80 // "scenePos.GetY() = " << scenePos.GetY(); | 78 // "scenePos.GetY() = " << scenePos.GetY(); |
79 lock->Invalidate(); | |
81 } | 80 } |
82 } | 81 } |
83 | 82 |
84 void CreateAngleMeasureTracker::PointerUp(const PointerEvent& e) | 83 void CreateAngleMeasureTracker::PointerUp(const PointerEvent& e) |
85 { | 84 { |