comparison 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
comparison
equal deleted inserted replaced
1200:54cbffabdc45 1203:f3bb9a6dd949
30 boost::shared_ptr<MeasureTool> measureTool, 30 boost::shared_ptr<MeasureTool> measureTool,
31 boost::weak_ptr<ViewportController> controllerW, 31 boost::weak_ptr<ViewportController> controllerW,
32 const PointerEvent& e) 32 const PointerEvent& e)
33 : EditMeasureTracker(controllerW, e) 33 : EditMeasureTracker(controllerW, e)
34 { 34 {
35 ScenePoint2D scenePos = e.GetMainPosition().Apply( 35 ScenePoint2D scenePos = e.GetMainPosition();
36 GetScene().GetCanvasToSceneTransform()); 36
37 {
38 boost::shared_ptr<ViewportController> controller = controllerW.lock();
39 if (controller)
40 {
41 std::auto_ptr<IViewport::ILock> lock(controller->GetViewport().Lock());
42 scenePos = e.GetMainPosition().Apply(lock->GetScene().GetCanvasToSceneTransform());
43 }
44 }
37 45
38 modifiedZone_ = dynamic_cast<LineMeasureTool&>(*measureTool).LineHitTest(scenePos); 46 modifiedZone_ = dynamic_cast<LineMeasureTool&>(*measureTool).LineHitTest(scenePos);
39 47
40 command_.reset(new EditLineMeasureCommand(measureTool, controllerW)); 48 command_.reset(new EditLineMeasureCommand(measureTool, controllerW));
41 } 49 }
45 53
46 } 54 }
47 55
48 void EditLineMeasureTracker::PointerMove(const PointerEvent& e) 56 void EditLineMeasureTracker::PointerMove(const PointerEvent& e)
49 { 57 {
50 ScenePoint2D scenePos = e.GetMainPosition().Apply( 58 boost::shared_ptr<ViewportController> controller = controllerW_.lock();
51 GetScene().GetCanvasToSceneTransform()); 59 if (controller)
60 {
61 std::auto_ptr<IViewport::ILock> lock(controller->GetViewport().Lock());
62 ScenePoint2D scenePos = e.GetMainPosition().Apply(
63 lock->GetScene().GetCanvasToSceneTransform());
52 64
53 ScenePoint2D delta = scenePos - GetOriginalClickPosition(); 65 ScenePoint2D delta = scenePos - GetOriginalClickPosition();
54 66
55 boost::shared_ptr<LineMeasureToolMemento> memento = 67 boost::shared_ptr<LineMeasureToolMemento> memento =
56 boost::dynamic_pointer_cast<LineMeasureToolMemento>(command_->mementoOriginal_); 68 boost::dynamic_pointer_cast<LineMeasureToolMemento>(command_->mementoOriginal_);
57 69
58 ORTHANC_ASSERT(memento.get() != NULL); 70 ORTHANC_ASSERT(memento.get() != NULL);
59 71
60 switch (modifiedZone_) 72 switch (modifiedZone_)
61 { 73 {
62 case LineMeasureTool::LineHighlightArea_Start: 74 case LineMeasureTool::LineHighlightArea_Start:
63 { 75 {
64 ScenePoint2D newStart = memento->start_ + delta; 76 ScenePoint2D newStart = memento->start_ + delta;
65 GetCommand()->SetStart(newStart); 77 GetCommand()->SetStart(newStart);
66 } 78 }
67 break;
68 case LineMeasureTool::LineHighlightArea_End:
69 {
70 ScenePoint2D newEnd = memento->end_ + delta;
71 GetCommand()->SetEnd(newEnd);
72 }
73 break;
74 case LineMeasureTool::LineHighlightArea_Segment:
75 {
76 ScenePoint2D newStart = memento->start_ + delta;
77 ScenePoint2D newEnd = memento->end_ + delta;
78 GetCommand()->SetStart(newStart);
79 GetCommand()->SetEnd(newEnd);
80 }
81 break;
82 default:
83 LOG(WARNING) << "Warning: please retry the measuring tool editing operation!";
84 break; 79 break;
80 case LineMeasureTool::LineHighlightArea_End:
81 {
82 ScenePoint2D newEnd = memento->end_ + delta;
83 GetCommand()->SetEnd(newEnd);
84 }
85 break;
86 case LineMeasureTool::LineHighlightArea_Segment:
87 {
88 ScenePoint2D newStart = memento->start_ + delta;
89 ScenePoint2D newEnd = memento->end_ + delta;
90 GetCommand()->SetStart(newStart);
91 GetCommand()->SetEnd(newEnd);
92 }
93 break;
94 default:
95 LOG(WARNING) << "Warning: please retry the measuring tool editing operation!";
96 break;
97 }
85 } 98 }
86 } 99 }
87 100
88 void EditLineMeasureTracker::PointerUp(const PointerEvent& e) 101 void EditLineMeasureTracker::PointerUp(const PointerEvent& e)
89 { 102 {
90 alive_ = false; 103 alive_ = false;
91 } 104 }
92 105