Mercurial > hg > orthanc-stone
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 |