comparison Framework/Scene2DViewport/EditAngleMeasureTracker.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
29 boost::shared_ptr<MeasureTool> measureTool, 29 boost::shared_ptr<MeasureTool> measureTool,
30 boost::weak_ptr<ViewportController> controllerW, 30 boost::weak_ptr<ViewportController> controllerW,
31 const PointerEvent& e) 31 const PointerEvent& e)
32 : EditMeasureTracker(controllerW, e) 32 : EditMeasureTracker(controllerW, e)
33 { 33 {
34 ScenePoint2D scenePos = e.GetMainPosition().Apply( 34 ScenePoint2D scenePos = e.GetMainPosition();
35 GetScene().GetCanvasToSceneTransform()); 35
36 boost::shared_ptr<ViewportController> controller = controllerW_.lock();
37 if (controller)
38 {
39 std::auto_ptr<IViewport::ILock> lock(controller->GetViewport().Lock());
40 scenePos = e.GetMainPosition().Apply(lock->GetScene().GetCanvasToSceneTransform());
41 }
36 42
37 modifiedZone_ = dynamic_cast<AngleMeasureTool&>(*measureTool).AngleHitTest(scenePos); 43 modifiedZone_ = dynamic_cast<AngleMeasureTool&>(*measureTool).AngleHitTest(scenePos);
38 44
39 command_.reset(new EditAngleMeasureCommand(measureTool, controllerW)); 45 command_.reset(new EditAngleMeasureCommand(measureTool, controllerW));
40 } 46 }
44 50
45 } 51 }
46 52
47 void EditAngleMeasureTracker::PointerMove(const PointerEvent& e) 53 void EditAngleMeasureTracker::PointerMove(const PointerEvent& e)
48 { 54 {
49 ScenePoint2D scenePos = e.GetMainPosition().Apply( 55 boost::shared_ptr<ViewportController> controller = controllerW_.lock();
50 GetScene().GetCanvasToSceneTransform()); 56 if (controller)
57 {
58 std::auto_ptr<IViewport::ILock> lock(controller->GetViewport().Lock());
59 ScenePoint2D scenePos = e.GetMainPosition().Apply(
60 lock->GetScene().GetCanvasToSceneTransform());
51 61
52 ScenePoint2D delta = scenePos - GetOriginalClickPosition(); 62 ScenePoint2D delta = scenePos - GetOriginalClickPosition();
53 63
54 boost::shared_ptr<AngleMeasureToolMemento> memento = 64 boost::shared_ptr<AngleMeasureToolMemento> memento =
55 boost::dynamic_pointer_cast<AngleMeasureToolMemento>(command_->mementoOriginal_); 65 boost::dynamic_pointer_cast<AngleMeasureToolMemento>(command_->mementoOriginal_);
56 66
57 ORTHANC_ASSERT(memento.get() != NULL); 67 ORTHANC_ASSERT(memento.get() != NULL);
58 68
59 switch (modifiedZone_) 69 switch (modifiedZone_)
60 { 70 {
61 case AngleMeasureTool::AngleHighlightArea_Center: 71 case AngleMeasureTool::AngleHighlightArea_Center:
62 { 72 {
63 ScenePoint2D newCenter = memento->center_ + delta; 73 ScenePoint2D newCenter = memento->center_ + delta;
64 GetCommand()->SetCenter(newCenter); 74 GetCommand()->SetCenter(newCenter);
65 } 75 }
66 break; 76 break;
67 case AngleMeasureTool::AngleHighlightArea_Side1: 77 case AngleMeasureTool::AngleHighlightArea_Side1:
68 case AngleMeasureTool::AngleHighlightArea_Side2: 78 case AngleMeasureTool::AngleHighlightArea_Side2:
69 { 79 {
70 ScenePoint2D newCenter = memento->center_ + delta; 80 ScenePoint2D newCenter = memento->center_ + delta;
71 ScenePoint2D newSide1End = memento->side1End_ + delta; 81 ScenePoint2D newSide1End = memento->side1End_ + delta;
72 ScenePoint2D newSide2End = memento->side2End_ + delta; 82 ScenePoint2D newSide2End = memento->side2End_ + delta;
73 GetCommand()->SetCenter(newCenter); 83 GetCommand()->SetCenter(newCenter);
74 GetCommand()->SetSide1End(newSide1End); 84 GetCommand()->SetSide1End(newSide1End);
75 GetCommand()->SetSide2End(newSide2End); 85 GetCommand()->SetSide2End(newSide2End);
76 } 86 }
77 break; 87 break;
78 case AngleMeasureTool::AngleHighlightArea_Side1End: 88 case AngleMeasureTool::AngleHighlightArea_Side1End:
79 { 89 {
80 ScenePoint2D newSide1End = memento->side1End_ + delta; 90 ScenePoint2D newSide1End = memento->side1End_ + delta;
81 GetCommand()->SetSide1End(newSide1End); 91 GetCommand()->SetSide1End(newSide1End);
82 } 92 }
83 break; 93 break;
84 case AngleMeasureTool::AngleHighlightArea_Side2End: 94 case AngleMeasureTool::AngleHighlightArea_Side2End:
85 { 95 {
86 ScenePoint2D newSide2End = memento->side2End_ + delta; 96 ScenePoint2D newSide2End = memento->side2End_ + delta;
87 GetCommand()->SetSide2End(newSide2End); 97 GetCommand()->SetSide2End(newSide2End);
88 } 98 }
89 break; 99 break;
90 default: 100 default:
91 LOG(WARNING) << "Warning: please retry the measuring tool editing operation!"; 101 LOG(WARNING) << "Warning: please retry the measuring tool editing operation!";
92 break; 102 break;
103 }
93 } 104 }
94 } 105 }
95 106
96 void EditAngleMeasureTracker::PointerUp(const PointerEvent& e) 107 void EditAngleMeasureTracker::PointerUp(const PointerEvent& e)
97 { 108 {