changeset 2339:c92f0758001e refactoring

handle zoom change in annotations
author Sebastien Jodogne <s.jodogne@gmail.com>
date Tue, 06 Oct 2026 09:37:43 +0200
parents 1bbd7011c2e2
children ed5785f0f7c0
files Applications/Samples/Common/SimpleViewerCore.cpp Applications/Samples/Common/SimpleViewerCore.h
diffstat 2 files changed, 18 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- a/Applications/Samples/Common/SimpleViewerCore.cpp	Tue Oct 06 09:11:34 2026 +0200
+++ b/Applications/Samples/Common/SimpleViewerCore.cpp	Tue Oct 06 09:37:43 2026 +0200
@@ -109,6 +109,15 @@
   }
 
 
+  void SimpleViewerCore::Handle(const ViewportController::SceneTransformChanged& message)
+  {
+    // 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());
+    lock->Invalidate();
+  }
+
+
   void SimpleViewerCore::CreateComponents(const boost::shared_ptr<StoneApplication::Context>& context,
                                           const boost::shared_ptr<IViewport>& viewport)
   {
@@ -137,6 +146,8 @@
     {
       std::unique_ptr<IViewport::ILock> viewportLock(viewport->Lock());
       viewportLock->GetController().SetUndoStack(boost::make_shared<UndoStack>());
+
+      Register<OrthancStone::ViewportController::SceneTransformChanged>(viewportLock->GetController(), &SimpleViewerCore::Handle);
     }
   }
 
@@ -154,7 +165,7 @@
       default_.SetWindowingLayer(0);
     }
 
-    virtual IFlexiblePointerTracker* CreateTracker(boost::weak_ptr<IViewport> viewport,
+    virtual IFlexiblePointerTracker* CreateTracker(boost::weak_ptr<IViewport> viewport,  // TODO Refactoring - Should be std::shared_ptr
                                                    const PointerEvent& event,
                                                    unsigned int viewportWidth,
                                                    unsigned int viewportHeight) ORTHANC_OVERRIDE
@@ -179,7 +190,7 @@
       return true;
     }
 
-    virtual void HandleMouseHover(IViewport& viewport,
+    virtual void HandleMouseHover(IViewport& viewport,  // TODO Refactoring - Should be a IViewport::ILock
                                   const PointerEvent& event) ORTHANC_OVERRIDE
     {
       std::unique_ptr<IViewport::ILock> viewportLock(viewport.Lock());
--- a/Applications/Samples/Common/SimpleViewerCore.h	Tue Oct 06 09:11:34 2026 +0200
+++ b/Applications/Samples/Common/SimpleViewerCore.h	Tue Oct 06 09:37:43 2026 +0200
@@ -33,9 +33,10 @@
 {
   class SimpleViewerCore :
     public ISingleViewportApplicationCore,
-    public boost::enable_shared_from_this<SimpleViewerCore>,
+    //public boost::enable_shared_from_this<SimpleViewerCore>,  // TODO Refactoring - Revert
     public New::TypedObserver<FrameDecodedMessage>,
-    public New::TypedObserver<DicomResourcesLoadedMessage>
+    public New::TypedObserver<DicomResourcesLoadedMessage>,
+    public OrthancStone::ObserverBase<SimpleViewerCore>  // TODO Refactoring - Remove
   {
   protected:
     boost::shared_ptr<StoneApplication::Context>  context_;
@@ -55,6 +56,8 @@
     virtual void Handle(const New::IObservable& observable,
                         const DicomResourcesLoadedMessage& message) ORTHANC_OVERRIDE;
 
+    void Handle(const ViewportController::SceneTransformChanged& message);
+
   protected:
     virtual void CreateComponents(const boost::shared_ptr<StoneApplication::Context>& context,
                                   const boost::shared_ptr<IViewport>& viewport) ORTHANC_OVERRIDE;