diff Framework/Layers/ILayerSource.h @ 381:19bd222283ae

uncoupling LayerReadyMessage from the creation of the renderer
author Sebastien Jodogne <s.jodogne@gmail.com>
date Tue, 06 Nov 2018 15:36:06 +0100
parents ba5ad93f935a
children 5f13809f3f76
line wrap: on
line diff
--- a/Framework/Layers/ILayerSource.h	Tue Nov 06 14:59:20 2018 +0100
+++ b/Framework/Layers/ILayerSource.h	Tue Nov 06 15:36:06 2018 +0100
@@ -59,29 +59,34 @@
 
     class LayerReadyMessage : public OriginMessage<MessageType_LayerSource_LayerReady, ILayerSource>
     {
+    public:
+      class IRendererFactory : public boost::noncopyable
+      {
+      public:
+        virtual ~IRendererFactory()
+        {
+        }
+
+        virtual ILayerRenderer* CreateRenderer() const = 0;
+      };
+    
     private:
-      std::auto_ptr<ILayerRenderer>  renderer_;
-      const CoordinateSystem3D&      slice_;
+      const IRendererFactory&    factory_;
+      const CoordinateSystem3D&  slice_;
 
     public:
       LayerReadyMessage(ILayerSource& origin,
-                        ILayerRenderer* renderer,  // Takes ownership => TODO Remove this!
+                        const IRendererFactory& rendererFactory,
                         const CoordinateSystem3D& slice) :
         OriginMessage(origin),
-        renderer_(renderer),
+        factory_(rendererFactory),
         slice_(slice)
       {
       }
 
-      // TODO - Remove this function
-      std::auto_ptr<ILayerRenderer>& GetRendererRaw()
+      ILayerRenderer* CreateRenderer() const
       {
-        return renderer_;
-      }
-
-      const ILayerRenderer& GetRenderer() const
-      {
-        return *renderer_;
+        return factory_.CreateRenderer();
       }
 
       const CoordinateSystem3D& GetSlice() const