# HG changeset patch # User Sebastien Jodogne # Date 1791708316 -7200 # Node ID 560be8bec5d70f4fd8cb7be79c73fb2404f785f0 # Parent f5f903bfa04495b77b904e30fffa15613e04b337 SimpleViewerCore does not use IViewport diff -r f5f903bfa044 -r 560be8bec5d7 Applications/Samples/Common/RtViewerView.cpp --- a/Applications/Samples/Common/RtViewerView.cpp Sun Oct 11 10:33:33 2026 +0200 +++ b/Applications/Samples/Common/RtViewerView.cpp Sun Oct 11 10:45:16 2026 +0200 @@ -118,9 +118,7 @@ void RtViewerView::DisplayFloatingCtrlInfoText(const PointerEvent& e) { - std::unique_ptr lock(viewport_->Lock()); - ViewportController& controller = *viewport_->GetController(); - Scene2D& scene = controller.GetScene(); + Scene2D& scene = viewport_->GetController()->GetScene(); ScenePoint2D p = e.GetMainPosition().Apply(scene.GetCanvasToSceneTransform()); @@ -150,11 +148,7 @@ void RtViewerView::HideInfoText() { - std::unique_ptr lock(viewport_->Lock()); - ViewportController& controller = *viewport_->GetController(); - Scene2D& scene = controller.GetScene(); - - scene.DeleteLayer(FLOATING_INFOTEXT_LAYER_ZINDEX); + viewport_->GetController()->GetScene().DeleteLayer(FLOATING_INFOTEXT_LAYER_ZINDEX); } void RtViewerView::OnSceneTransformChanged( @@ -165,16 +159,12 @@ void RtViewerView::Invalidate() { - std::unique_ptr lock(viewport_->Lock()); - lock->GetCompositor().FitContent(viewport_->GetController()->GetScene()); - lock->Invalidate(); + viewport_->GetController()->InvalidateViewport(); } void RtViewerView::FitContent() { - std::unique_ptr lock(viewport_->Lock()); - lock->GetCompositor().FitContent(viewport_->GetController()->GetScene()); - lock->Invalidate(); + viewport_->GetController()->FitContent(); } void RtViewerView::Scroll(int delta) @@ -223,6 +213,7 @@ void RtViewerView::UpdateLayers() { + // TODO Refactoring - Moving this lock down results in crash => is the environment mutex locked? std::unique_ptr lock(viewport_->Lock()); if (planes_.size() == 0) diff -r f5f903bfa044 -r 560be8bec5d7 Applications/Samples/Common/SimpleViewerCore.cpp --- a/Applications/Samples/Common/SimpleViewerCore.cpp Sun Oct 11 10:33:33 2026 +0200 +++ b/Applications/Samples/Common/SimpleViewerCore.cpp Sun Oct 11 10:45:16 2026 +0200 @@ -51,8 +51,8 @@ //layer->SetLinearInterpolation(true); layer->SetLinearInterpolation(false); - viewport_->GetController()->GetScene().SetLayer(0, layer.release()); - viewport_->GetController()->FitContent(); + controller_->GetScene().SetLayer(0, layer.release()); + controller_->FitContent(); } @@ -116,8 +116,8 @@ void SimpleViewerCore::RenderAnnotations() { - annotations_->Render(viewport_->GetController()->GetScene()); - viewport_->GetController()->InvalidateViewport(); + annotations_->Render(controller_->GetScene()); + controller_->InvalidateViewport(); } @@ -136,14 +136,14 @@ } if (context_ || - viewport_ || + controller_ || annotations_) { throw Orthanc::OrthancException(Orthanc::ErrorCode_BadSequenceOfCalls); } context_ = context; - viewport_ = viewport; + controller_ = viewport->GetController(); dicomLoader_ = DicomResourcesLoader::Create(*context); @@ -159,26 +159,26 @@ Register(*annotations_, &SimpleViewerCore::Handle); - viewport_->GetController()->SetUndoStack(boost::make_shared()); + controller_->SetUndoStack(boost::make_shared()); #if TEST_MEASURE_TOOLS == 1 { - boost::shared_ptr tool = OrthancStone::LineMeasureTool::Create(viewport_->GetController()); + boost::shared_ptr tool = OrthancStone::LineMeasureTool::Create(controller_); tool->Enable(); tool->Set(OrthancStone::ScenePoint2D(200, 100), OrthancStone::ScenePoint2D(100, 200)); - viewport_->GetController()->AddMeasureTool(boost::dynamic_pointer_cast(tool)); + controller_->AddMeasureTool(boost::dynamic_pointer_cast(tool)); } { - boost::shared_ptr tool = OrthancStone::AngleMeasureTool::Create(viewport_->GetController()); + boost::shared_ptr tool = OrthancStone::AngleMeasureTool::Create(controller_); tool->Enable(); tool->SetCenter(OrthancStone::ScenePoint2D(300, 300)); tool->SetSide1End(OrthancStone::ScenePoint2D(200, 400)); tool->SetSide2End(OrthancStone::ScenePoint2D(400, 400)); - viewport_->GetController()->AddMeasureTool(boost::dynamic_pointer_cast(tool)); + controller_->AddMeasureTool(boost::dynamic_pointer_cast(tool)); } #endif } @@ -259,14 +259,14 @@ const ScenePoint2D p = event.GetMainPosition().Apply(scene.GetCanvasToSceneTransform()); std::vector< boost::shared_ptr > tools; - tools = core_->viewport_->GetController()->HitTestMeasureTools(p); + tools = core_->controller_->HitTestMeasureTools(p); if (!tools.empty()) { if (core_->annotations_->GetActiveTool() == AnnotationsSceneLayer::Tool_Remove) { boost::shared_ptr command(new DeleteMeasureCommand(tools[0])); - core_->viewport_->GetController()->PushCommand(command); + core_->controller_->PushCommand(command); return NULL; } else @@ -283,10 +283,10 @@ break; case AnnotationsSceneLayer::Tool_Length: - return core_->viewport_->GetController()->CreateLineMeasure(event); + return core_->controller_->CreateLineMeasure(event); case AnnotationsSceneLayer::Tool_Angle: - return core_->viewport_->GetController()->CreateAngleMeasure(event); + return core_->controller_->CreateAngleMeasure(event); default: LOG(ERROR) << "This tool is not supported if not using the annotations layer"; @@ -341,23 +341,23 @@ switch (key) { case 's': - viewport_->GetController()->FitContent(); + controller_->FitContent(); break; case 'u': { - if (viewport_->GetController()->CanUndo()) + if (controller_->CanUndo()) { - viewport_->GetController()->Undo(); + controller_->Undo(); } break; } case 'U': { - if (viewport_->GetController()->CanRedo()) + if (controller_->CanRedo()) { - viewport_->GetController()->Redo(); + controller_->Redo(); } break; } diff -r f5f903bfa044 -r 560be8bec5d7 Applications/Samples/Common/SimpleViewerCore.h --- a/Applications/Samples/Common/SimpleViewerCore.h Sun Oct 11 10:33:33 2026 +0200 +++ b/Applications/Samples/Common/SimpleViewerCore.h Sun Oct 11 10:45:16 2026 +0200 @@ -40,7 +40,7 @@ { protected: boost::shared_ptr context_; - boost::shared_ptr viewport_; + boost::shared_ptr controller_; private: class Interactor;