diff Framework/Widgets/LayerWidget.cpp @ 90:64e60018943f wasm

fix and observer refactoring
author Sebastien Jodogne <s.jodogne@gmail.com>
date Mon, 29 May 2017 11:04:18 +0200
parents f244018a4e4b
children 961ee171d933
line wrap: on
line diff
--- a/Framework/Widgets/LayerWidget.cpp	Fri May 26 18:27:59 2017 +0200
+++ b/Framework/Widgets/LayerWidget.cpp	Mon May 29 11:04:18 2017 +0200
@@ -106,11 +106,6 @@
 
       for (size_t i = 0; i < renderers_.size(); i++)
       {
-        if (renderers_[i] != NULL)
-        {
-          LOG(ERROR) << "...............";
-        }
-
         if (renderers_[i] != NULL &&
             !renderers_[i]->RenderLayer(context, view, slice_))
         {
@@ -351,8 +346,7 @@
     layersIndex_[layer] = index;
 
     ResetPendingScene();
-    LOG(ERROR) << "*****************************";
-    layer->SetObserver(*this);
+    layer->Register(*this);
 
     return index;
   }
@@ -385,18 +379,42 @@
 
   void LayerWidget::SetSlice(const SliceGeometry& slice)
   {
-    if (currentScene_.get() == NULL ||
-        (pendingScene_.get() != NULL &&
-         pendingScene_->IsComplete()))
+    Slice displayedSlice(slice_, THIN_SLICE_THICKNESS);
+
+    if (!displayedSlice.ContainsPlane(slice))
     {
-      currentScene_ = pendingScene_;
-    }
+      if (currentScene_.get() == NULL ||
+          (pendingScene_.get() != NULL &&
+           pendingScene_->IsComplete()))
+      {
+        currentScene_ = pendingScene_;
+      }
 
-    slice_ = slice;
-    ResetPendingScene();
+      slice_ = slice;
+      ResetPendingScene();
+
+      InvalidateAllLayers();
+    }
   }
 
 
+  void LayerWidget::NotifyGeometryReady(const ILayerSource& source)
+  {
+    size_t i;
+    if (LookupLayer(i, source))
+    {
+      LOG(INFO) << "Geometry ready for layer " << i;
+      layers_[i]->ScheduleLayerCreation(slice_);
+    }
+  }
+  
+
+  void LayerWidget::NotifyGeometryError(const ILayerSource& source)
+  {
+    LOG(ERROR) << "Cannot get geometry";
+  }
+  
+
   void LayerWidget::InvalidateAllLayers()
   {
     for (size_t i = 0; i < layers_.size(); i++)
@@ -443,18 +461,16 @@
   }
   
   
-  void LayerWidget::NotifyLayerReady(ILayerRenderer* renderer,
+  void LayerWidget::NotifyLayerReady(std::auto_ptr<ILayerRenderer>& renderer,
                                      const ILayerSource& source,
                                      const Slice& slice)
   {
-    std::auto_ptr<ILayerRenderer> tmp(renderer);
-
     size_t index;
     if (LookupLayer(index, source) &&
         slice.ContainsPlane(slice_))  // Whether the slice comes from an older request
     {
       LOG(INFO) << "Renderer ready for layer " << index;
-      UpdateLayer(index, tmp.release(), slice);
+      UpdateLayer(index, renderer.release(), slice);
     }
   }