Mercurial > hg > orthanc-stone
changeset 2385:bebd0583ebda refactoring
move IViewport::GetController() outside of ILock
| author | Sebastien Jodogne <s.jodogne@gmail.com> |
|---|---|
| date | Sun, 11 Oct 2026 10:21:23 +0200 |
| parents | 83ea57ed2863 |
| children | f5f903bfa044 |
| files | Applications/Samples/Common/RtViewerView.cpp Applications/Samples/Common/SimpleViewerCore.cpp Applications/Samples/Sdl/RtViewer/RtViewerSdl.cpp Applications/Samples/Sdl/SingleViewportSdlApplication.cpp Applications/Samples/WebAssembly/SingleFrameViewer/SingleFrameViewerApplication.h OrthancStone/Sources/Platforms/Sdl/SdlViewport.cpp OrthancStone/Sources/Platforms/Sdl/SdlViewport.h OrthancStone/Sources/Platforms/WebAssembly/WebAssemblyViewport.cpp OrthancStone/Sources/Platforms/WebAssembly/WebAssemblyViewport.h OrthancStone/Sources/Platforms/WebAssembly/WebGLViewportsRegistry.cpp OrthancStone/Sources/Platforms/WebAssembly/WebGLViewportsRegistry.h OrthancStone/Sources/Viewport/IViewport.h |
| diffstat | 12 files changed, 62 insertions(+), 67 deletions(-) [+] |
line wrap: on
line diff
--- a/Applications/Samples/Common/RtViewerView.cpp Sun Oct 11 09:56:59 2026 +0200 +++ b/Applications/Samples/Common/RtViewerView.cpp Sun Oct 11 10:21:23 2026 +0200 @@ -83,7 +83,7 @@ { std::unique_ptr<IViewport::ILock> lock(viewport_->Lock()); - ViewportController& controller = lock->GetController(); + ViewportController& controller = *viewport_->GetController(); Scene2D& scene = controller.GetScene(); std::stringstream msg; @@ -119,7 +119,7 @@ void RtViewerView::DisplayFloatingCtrlInfoText(const PointerEvent& e) { std::unique_ptr<IViewport::ILock> lock(viewport_->Lock()); - ViewportController& controller = lock->GetController(); + ViewportController& controller = *viewport_->GetController(); Scene2D& scene = controller.GetScene(); ScenePoint2D p = e.GetMainPosition().Apply(scene.GetCanvasToSceneTransform()); @@ -151,7 +151,7 @@ void RtViewerView::HideInfoText() { std::unique_ptr<IViewport::ILock> lock(viewport_->Lock()); - ViewportController& controller = lock->GetController(); + ViewportController& controller = *viewport_->GetController(); Scene2D& scene = controller.GetScene(); scene.DeleteLayer(FLOATING_INFOTEXT_LAYER_ZINDEX); @@ -166,14 +166,14 @@ void RtViewerView::Invalidate() { std::unique_ptr<IViewport::ILock> lock(viewport_->Lock()); - lock->GetCompositor().FitContent(lock->GetController().GetScene()); + lock->GetCompositor().FitContent(viewport_->GetController()->GetScene()); lock->Invalidate(); } void RtViewerView::FitContent() { std::unique_ptr<IViewport::ILock> lock(viewport_->Lock()); - lock->GetCompositor().FitContent(lock->GetController().GetScene()); + lock->GetCompositor().FitContent(viewport_->GetController()->GetScene()); lock->Invalidate(); } @@ -234,15 +234,15 @@ { if (ctVolumeLayerSource_.get() != NULL) { - ctVolumeLayerSource_->Update(lock->GetController().GetScene(), planes_[currentPlane_]); + ctVolumeLayerSource_->Update(viewport_->GetController()->GetScene(), planes_[currentPlane_]); } if (doseVolumeLayerSource_.get() != NULL) { - doseVolumeLayerSource_->Update(lock->GetController().GetScene(), planes_[currentPlane_]); + doseVolumeLayerSource_->Update(viewport_->GetController()->GetScene(), planes_[currentPlane_]); } if (structLayerSource_.get() != NULL) { - structLayerSource_->Update(lock->GetController().GetScene(), planes_[currentPlane_]); + structLayerSource_->Update(viewport_->GetController()->GetScene(), planes_[currentPlane_]); } } lock->Invalidate(); @@ -259,7 +259,7 @@ **/ lock->RefreshCanvasSize(); - ViewportController& controller = lock->GetController(); + ViewportController& controller = *viewport_->GetController(); ICompositor& compositor = lock->GetCompositor(); // False means we do NOT let a hi-DPI aware desktop managedr treat this as a legacy application that requires @@ -285,7 +285,7 @@ void RtViewerView::RegisterMessages() { std::unique_ptr<IViewport::ILock> lock(viewport_->Lock()); - ViewportController& controller = lock->GetController(); + ViewportController& controller = *viewport_->GetController(); Register<ViewportController::SceneTransformChanged>(controller, &RtViewerView::OnSceneTransformChanged); } @@ -321,7 +321,7 @@ ILayerStyleConfigurator* style) { std::unique_ptr<IViewport::ILock> lock(viewport_->Lock()); - ViewportController& controller = lock->GetController(); + ViewportController& controller = *viewport_->GetController(); Scene2D& scene = controller.GetScene(); int depth = scene.GetMaxDepth() + 1; @@ -339,7 +339,7 @@ ILayerStyleConfigurator* style) { std::unique_ptr<IViewport::ILock> lock(viewport_->Lock()); - ViewportController& controller = lock->GetController(); + ViewportController& controller = *viewport_->GetController(); Scene2D& scene = controller.GetScene(); int depth = scene.GetMaxDepth() + 1; @@ -354,7 +354,7 @@ void RtViewerView::SetStructureSet(const boost::shared_ptr<DicomStructureSetLoader>& volume) { std::unique_ptr<IViewport::ILock> lock(viewport_->Lock()); - ViewportController& controller = lock->GetController(); + ViewportController& controller = *viewport_->GetController(); Scene2D& scene = controller.GetScene(); int depth = scene.GetMaxDepth() + 1;
--- a/Applications/Samples/Common/SimpleViewerCore.cpp Sun Oct 11 09:56:59 2026 +0200 +++ b/Applications/Samples/Common/SimpleViewerCore.cpp Sun Oct 11 10:21:23 2026 +0200 @@ -51,10 +51,11 @@ //layer->SetLinearInterpolation(true); layer->SetLinearInterpolation(false); + viewport_->GetController()->GetScene().SetLayer(0, layer.release()); + { std::unique_ptr<IViewport::ILock> viewportLock(viewport_->Lock()); - viewportLock->GetController().GetScene().SetLayer(0, layer.release()); - viewportLock->GetCompositor().FitContent(viewportLock->GetController().GetScene()); + viewportLock->GetCompositor().FitContent(viewport_->GetController()->GetScene()); viewportLock->Invalidate(); } } @@ -122,7 +123,7 @@ { // This is necessary to update the size of handles in the annotations layer while zoom level changes std::unique_ptr<OrthancStone::IViewport::ILock> lock(viewport_->Lock()); - annotations_->Render(lock->GetController().GetScene()); + annotations_->Render(viewport_->GetController()->GetScene()); lock->Invalidate(); } @@ -154,10 +155,7 @@ Register<AnnotationsSceneLayer::AnnotationRemovedMessage>(*annotations_, &SimpleViewerCore::Handle); - { - std::unique_ptr<IViewport::ILock> viewportLock(viewport->Lock()); - viewportLock->GetController().SetUndoStack(boost::make_shared<UndoStack>()); - } + viewport_->GetController()->SetUndoStack(boost::make_shared<UndoStack>()); #if 0 && TEST_MEASURE_TOOLS == 1 // TODO Refactoring - Reenable this { @@ -261,14 +259,14 @@ std::unique_ptr<IViewport::ILock> viewportLock(core_->viewport_->Lock()); std::vector< boost::shared_ptr<MeasureTool> > tools; - tools = viewportLock->GetController().HitTestMeasureTools(p); + tools = core_->viewport_->GetController()->HitTestMeasureTools(p); if (!tools.empty()) { if (core_->annotations_->GetActiveTool() == AnnotationsSceneLayer::Tool_Remove) { boost::shared_ptr<MeasureCommand> command(new DeleteMeasureCommand(tools[0])); - viewportLock->GetController().PushCommand(command); + core_->viewport_->GetController()->PushCommand(command); return NULL; } else @@ -285,10 +283,10 @@ break; case AnnotationsSceneLayer::Tool_Length: - return viewportLock->GetController().CreateLineMeasure(event); + return core_->viewport_->GetController()->CreateLineMeasure(event); case AnnotationsSceneLayer::Tool_Angle: - return viewportLock->GetController().CreateAngleMeasure(event); + return core_->viewport_->GetController()->CreateAngleMeasure(event); default: LOG(ERROR) << "This tool is not supported if not using the annotations layer"; @@ -345,7 +343,7 @@ case 's': { std::unique_ptr<IViewport::ILock> viewportLock(viewport_->Lock()); - viewportLock->GetCompositor().FitContent(viewportLock->GetController().GetScene()); + viewportLock->GetCompositor().FitContent(viewport_->GetController()->GetScene()); viewportLock->Invalidate(); break; } @@ -353,19 +351,18 @@ case 'u': { std::unique_ptr<IViewport::ILock> viewportLock(viewport_->Lock()); - if (viewportLock->GetController().CanUndo()) + if (viewport_->GetController()->CanUndo()) { - viewportLock->GetController().Undo(); + viewport_->GetController()->Undo(); } break; } case 'U': { - std::unique_ptr<IViewport::ILock> viewportLock(viewport_->Lock()); - if (viewportLock->GetController().CanRedo()) + if (viewport_->GetController()->CanRedo()) { - viewportLock->GetController().Redo(); + viewport_->GetController()->Redo(); } break; }
--- a/Applications/Samples/Sdl/RtViewer/RtViewerSdl.cpp Sun Oct 11 09:56:59 2026 +0200 +++ b/Applications/Samples/Sdl/RtViewer/RtViewerSdl.cpp Sun Oct 11 10:21:23 2026 +0200 @@ -174,7 +174,7 @@ unsigned int canvasHeight) { std::unique_ptr<IViewport::ILock> lock(viewport_->Lock()); - ViewportController& controller = lock->GetController(); + ViewportController& controller = *viewport_->GetController(); const Scene2D& scene = controller.GetScene(); std::string ttf; @@ -319,7 +319,7 @@ case SDLK_s: { std::unique_ptr<IViewport::ILock> lock(view->GetViewport()->Lock()); - lock->GetCompositor().FitContent(lock->GetController().GetScene()); + lock->GetCompositor().FitContent(view->GetViewport()->GetController()->GetScene()); lock->Invalidate(); } break; @@ -350,17 +350,17 @@ { case SDL_MOUSEBUTTONDOWN: interactor.SetWindowingLayer(view->GetCtLayerIndex()); - lock->GetController().HandleMousePress(interactor, p, - lock->GetCompositor().GetCanvasWidth(), - lock->GetCompositor().GetCanvasHeight()); + view->GetViewport()->GetController()->HandleMousePress(interactor, p, + lock->GetCompositor().GetCanvasWidth(), + lock->GetCompositor().GetCanvasHeight()); break; case SDL_MOUSEMOTION: - lock->GetController().HandleMouseMove(p); + view->GetViewport()->GetController()->HandleMouseMove(p); break; case SDL_MOUSEBUTTONUP: - lock->GetController().HandleMouseRelease(p); + view->GetViewport()->GetController()->HandleMouseRelease(p); break; default:
--- a/Applications/Samples/Sdl/SingleViewportSdlApplication.cpp Sun Oct 11 09:56:59 2026 +0200 +++ b/Applications/Samples/Sdl/SingleViewportSdlApplication.cpp Sun Oct 11 10:21:23 2026 +0200 @@ -119,27 +119,27 @@ { case SDL_MOUSEBUTTONDOWN: { - viewportLock->GetController().HandleMousePress(*interactor, p, viewportLock->GetCompositor().GetCanvasWidth(), - viewportLock->GetCompositor().GetCanvasHeight()); + viewport_->GetController()->HandleMousePress(*interactor, p, viewportLock->GetCompositor().GetCanvasWidth(), + viewportLock->GetCompositor().GetCanvasHeight()); break; } case SDL_MOUSEMOTION: { - if (viewportLock->GetController().HasActiveTracker()) + if (viewport_->GetController()->HasActiveTracker()) { - viewportLock->GetController().HandleMouseMove(p); + viewport_->GetController()->HandleMouseMove(p); } else if (interactor->HasMouseHover()) { - interactor->HandleMouseHover(viewportLock->GetController().GetScene(), p); + interactor->HandleMouseHover(viewport_->GetController()->GetScene(), p); viewportLock->Invalidate(); } break; } case SDL_MOUSEBUTTONUP: - viewportLock->GetController().HandleMouseRelease(p); + viewport_->GetController()->HandleMouseRelease(p); break; default:
--- a/Applications/Samples/WebAssembly/SingleFrameViewer/SingleFrameViewerApplication.h Sun Oct 11 09:56:59 2026 +0200 +++ b/Applications/Samples/WebAssembly/SingleFrameViewer/SingleFrameViewerApplication.h Sun Oct 11 10:21:23 2026 +0200 @@ -59,10 +59,11 @@ message.GetInstanceParameters().CreateTexture(message.GetImage())); layer->SetLinearInterpolation(true); + viewport_->GetController()->GetScene().SetLayer(0, layer.release()); + { std::unique_ptr<IViewport::ILock> lock(viewport_->Lock()); - lock->GetController().GetScene().SetLayer(0, layer.release()); - lock->GetCompositor().FitContent(lock->GetController().GetScene()); + lock->GetCompositor().FitContent(viewport_->GetController()->GetScene()); lock->Invalidate(); } } @@ -137,7 +138,7 @@ void FitContent() { std::unique_ptr<IViewport::ILock> lock(viewport_->Lock()); - lock->GetCompositor().FitContent(lock->GetController().GetScene()); + lock->GetCompositor().FitContent(viewport_->GetController()->GetScene()); lock->Invalidate(); } };
--- a/OrthancStone/Sources/Platforms/Sdl/SdlViewport.cpp Sun Oct 11 09:56:59 2026 +0200 +++ b/OrthancStone/Sources/Platforms/Sdl/SdlViewport.cpp Sun Oct 11 10:21:23 2026 +0200 @@ -146,7 +146,7 @@ void SdlOpenGLViewport::Paint() { SdlLock lock(*this); - lock.GetCompositor().Refresh(lock.GetController().GetScene()); + lock.GetCompositor().Refresh(GetController()->GetScene()); } #endif @@ -196,7 +196,7 @@ { SdlLock lock(*this); - lock.GetCompositor().Refresh(lock.GetController().GetScene()); + lock.GetCompositor().Refresh(GetController()->GetScene()); CreateSdlSurfaceFromCompositor(dynamic_cast<CairoCompositor&>(lock.GetCompositor())); if (sdlSurface_ != NULL)
--- a/OrthancStone/Sources/Platforms/Sdl/SdlViewport.h Sun Oct 11 09:56:59 2026 +0200 +++ b/OrthancStone/Sources/Platforms/Sdl/SdlViewport.h Sun Oct 11 10:21:23 2026 +0200 @@ -87,11 +87,6 @@ virtual ICompositor& GetCompositor() ORTHANC_OVERRIDE; - virtual ViewportController& GetController() ORTHANC_OVERRIDE - { - return *that_.controller_; - } - virtual void Invalidate() ORTHANC_OVERRIDE { that_.SendRefreshEvent(); @@ -137,6 +132,11 @@ // Must be invoked from the main SDL thread virtual void Paint() = 0; + + virtual const boost::shared_ptr<ViewportController>& GetController() const ORTHANC_OVERRIDE + { + return controller_; + } };
--- a/OrthancStone/Sources/Platforms/WebAssembly/WebAssemblyViewport.cpp Sun Oct 11 09:56:59 2026 +0200 +++ b/OrthancStone/Sources/Platforms/WebAssembly/WebAssemblyViewport.cpp Sun Oct 11 10:21:23 2026 +0200 @@ -105,12 +105,6 @@ } } - virtual ViewportController& GetController() ORTHANC_OVERRIDE - { - assert(that_.controller_); - return *that_.controller_; - } - virtual void Invalidate() ORTHANC_OVERRIDE { that_.Invalidate();
--- a/OrthancStone/Sources/Platforms/WebAssembly/WebAssemblyViewport.h Sun Oct 11 09:56:59 2026 +0200 +++ b/OrthancStone/Sources/Platforms/WebAssembly/WebAssemblyViewport.h Sun Oct 11 10:21:23 2026 +0200 @@ -179,5 +179,10 @@ } void FitForPrint(); + + virtual const boost::shared_ptr<ViewportController>& GetController() const ORTHANC_OVERRIDE + { + return controller_; + } }; }
--- a/OrthancStone/Sources/Platforms/WebAssembly/WebGLViewportsRegistry.cpp Sun Oct 11 09:56:59 2026 +0200 +++ b/OrthancStone/Sources/Platforms/WebAssembly/WebGLViewportsRegistry.cpp Sun Oct 11 10:21:23 2026 +0200 @@ -82,12 +82,12 @@ std::unique_ptr<IViewport::ILock> lock(it->second->Lock()); // TODO: remove ViewportController - Scene2D* scene = lock->GetController().ReleaseScene(); + Scene2D* scene = it->second->GetController()->ReleaseScene(); viewport = WebGLViewport::Create(it->first); { std::unique_ptr<IViewport::ILock> newLock(viewport->Lock()); - newLock->GetController().AcquireScene(scene); + it->second->GetController()->AcquireScene(scene); } }
--- a/OrthancStone/Sources/Platforms/WebAssembly/WebGLViewportsRegistry.h Sun Oct 11 09:56:59 2026 +0200 +++ b/OrthancStone/Sources/Platforms/WebAssembly/WebGLViewportsRegistry.h Sun Oct 11 10:21:23 2026 +0200 @@ -29,6 +29,8 @@ namespace OrthancStone { + // TODO Refactoring - Move this class to graveyard + /** * This singleton class must be used if many WebGL viewports are * created by the higher-level application, implying possible loss
--- a/OrthancStone/Sources/Viewport/IViewport.h Sun Oct 11 09:56:59 2026 +0200 +++ b/OrthancStone/Sources/Viewport/IViewport.h Sun Oct 11 10:21:23 2026 +0200 @@ -57,12 +57,6 @@ */ virtual ICompositor& GetCompositor() = 0; - /** - Do not store the result! Only access the compositor interface through - the lock. - */ - virtual ViewportController& GetController() = 0; // TODO Refactoring - Remove this - virtual void Invalidate() = 0; @@ -82,5 +76,7 @@ } virtual ILock* Lock() = 0; + + virtual const boost::shared_ptr<ViewportController>& GetController() const = 0; // TODO Refactoring - Remove this }; }
