Mercurial > hg > orthanc-stone
diff Framework/Scene2DViewport/EditLineMeasureTracker.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 | e713f1a99861 |
children | 86a8266b8888 |
line wrap: on
line diff
--- a/Framework/Scene2DViewport/EditLineMeasureTracker.cpp Fri Nov 29 11:03:41 2019 +0100 +++ b/Framework/Scene2DViewport/EditLineMeasureTracker.cpp Fri Nov 29 21:22:21 2019 +0100 @@ -32,8 +32,16 @@ const PointerEvent& e) : EditMeasureTracker(controllerW, e) { - ScenePoint2D scenePos = e.GetMainPosition().Apply( - GetScene().GetCanvasToSceneTransform()); + ScenePoint2D scenePos = e.GetMainPosition(); + + { + boost::shared_ptr<ViewportController> controller = controllerW.lock(); + if (controller) + { + std::auto_ptr<IViewport::ILock> lock(controller->GetViewport().Lock()); + scenePos = e.GetMainPosition().Apply(lock->GetScene().GetCanvasToSceneTransform()); + } + } modifiedZone_ = dynamic_cast<LineMeasureTool&>(*measureTool).LineHitTest(scenePos); @@ -47,44 +55,49 @@ void EditLineMeasureTracker::PointerMove(const PointerEvent& e) { - ScenePoint2D scenePos = e.GetMainPosition().Apply( - GetScene().GetCanvasToSceneTransform()); - - ScenePoint2D delta = scenePos - GetOriginalClickPosition(); - - boost::shared_ptr<LineMeasureToolMemento> memento = - boost::dynamic_pointer_cast<LineMeasureToolMemento>(command_->mementoOriginal_); - - ORTHANC_ASSERT(memento.get() != NULL); - - switch (modifiedZone_) - { - case LineMeasureTool::LineHighlightArea_Start: + boost::shared_ptr<ViewportController> controller = controllerW_.lock(); + if (controller) { - ScenePoint2D newStart = memento->start_ + delta; - GetCommand()->SetStart(newStart); - } - break; - case LineMeasureTool::LineHighlightArea_End: - { - ScenePoint2D newEnd = memento->end_ + delta; - GetCommand()->SetEnd(newEnd); - } - break; - case LineMeasureTool::LineHighlightArea_Segment: - { - ScenePoint2D newStart = memento->start_ + delta; - ScenePoint2D newEnd = memento->end_ + delta; - GetCommand()->SetStart(newStart); - GetCommand()->SetEnd(newEnd); - } - break; - default: - LOG(WARNING) << "Warning: please retry the measuring tool editing operation!"; + std::auto_ptr<IViewport::ILock> lock(controller->GetViewport().Lock()); + ScenePoint2D scenePos = e.GetMainPosition().Apply( + lock->GetScene().GetCanvasToSceneTransform()); + + ScenePoint2D delta = scenePos - GetOriginalClickPosition(); + + boost::shared_ptr<LineMeasureToolMemento> memento = + boost::dynamic_pointer_cast<LineMeasureToolMemento>(command_->mementoOriginal_); + + ORTHANC_ASSERT(memento.get() != NULL); + + switch (modifiedZone_) + { + case LineMeasureTool::LineHighlightArea_Start: + { + ScenePoint2D newStart = memento->start_ + delta; + GetCommand()->SetStart(newStart); + } break; + case LineMeasureTool::LineHighlightArea_End: + { + ScenePoint2D newEnd = memento->end_ + delta; + GetCommand()->SetEnd(newEnd); + } + break; + case LineMeasureTool::LineHighlightArea_Segment: + { + ScenePoint2D newStart = memento->start_ + delta; + ScenePoint2D newEnd = memento->end_ + delta; + GetCommand()->SetStart(newStart); + GetCommand()->SetEnd(newEnd); + } + break; + default: + LOG(WARNING) << "Warning: please retry the measuring tool editing operation!"; + break; + } } } - + void EditLineMeasureTracker::PointerUp(const PointerEvent& e) { alive_ = false;