Mercurial > hg > orthanc-stone
diff 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 |
line wrap: on
line diff
--- a/Framework/Scene2DViewport/CreateLineMeasureTracker.cpp Fri Nov 29 11:03:41 2019 +0100 +++ b/Framework/Scene2DViewport/CreateLineMeasureTracker.cpp Fri Nov 29 21:22:21 2019 +0100 @@ -30,10 +30,18 @@ const PointerEvent& e) : CreateMeasureTracker(controllerW) { - command_.reset( - new CreateLineMeasureCommand( - controllerW, - e.GetMainPosition().Apply(GetScene().GetCanvasToSceneTransform()))); + ScenePoint2D point = e.GetMainPosition(); + + { + boost::shared_ptr<ViewportController> controller = controllerW.lock(); + if (controller) + { + std::auto_ptr<IViewport::ILock> lock(controller->GetViewport().Lock()); + point = e.GetMainPosition().Apply(lock->GetScene().GetCanvasToSceneTransform()); + } + } + + command_.reset(new CreateLineMeasureCommand(controllerW, point)); } CreateLineMeasureTracker::~CreateLineMeasureTracker() @@ -50,16 +58,21 @@ "PointerMove: active_ == false"); } - ScenePoint2D scenePos = event.GetMainPosition().Apply( - GetScene().GetCanvasToSceneTransform()); - - //LOG(TRACE) << "scenePos.GetX() = " << scenePos.GetX() << " " << - // "scenePos.GetY() = " << scenePos.GetY(); - - CreateLineMeasureTracker* concreteThis = - dynamic_cast<CreateLineMeasureTracker*>(this); - assert(concreteThis != NULL); - GetCommand()->SetEnd(scenePos); + boost::shared_ptr<ViewportController> controller = controllerW_.lock(); + if (controller) + { + std::auto_ptr<IViewport::ILock> lock(controller->GetViewport().Lock()); + ScenePoint2D scenePos = event.GetMainPosition().Apply( + lock->GetScene().GetCanvasToSceneTransform()); + + //LOG(TRACE) << "scenePos.GetX() = " << scenePos.GetX() << " " << + // "scenePos.GetY() = " << scenePos.GetY(); + + CreateLineMeasureTracker* concreteThis = + dynamic_cast<CreateLineMeasureTracker*>(this); + assert(concreteThis != NULL); + GetCommand()->SetEnd(scenePos); + } } void CreateLineMeasureTracker::PointerUp(const PointerEvent& e)