diff Framework/Widgets/LayerWidget.cpp @ 103:474d85e76499 wasm

mpr
author Sebastien Jodogne <s.jodogne@gmail.com>
date Wed, 31 May 2017 18:05:33 +0200
parents efd9ef2b67f1
children 53bd9277b025
line wrap: on
line diff
--- a/Framework/Widgets/LayerWidget.cpp	Wed May 31 17:01:18 2017 +0200
+++ b/Framework/Widgets/LayerWidget.cpp	Wed May 31 18:05:33 2017 +0200
@@ -375,6 +375,8 @@
     ResetPendingScene();
     layer->Register(*this);
 
+    ResetChangedLayers();
+
     return index;
   }
 
@@ -435,7 +437,9 @@
     if (LookupLayer(i, source))
     {
       LOG(INFO) << "Geometry ready for layer " << i;
-      layers_[i]->ScheduleLayerCreation(slice_);
+
+      changedLayers_[i] = true;
+      //layers_[i]->ScheduleLayerCreation(slice_);
     }
   }
   
@@ -451,7 +455,9 @@
     for (size_t i = 0; i < layers_.size(); i++)
     {
       assert(layers_[i] != NULL);
-      layers_[i]->ScheduleLayerCreation(slice_);
+      changedLayers_[i] = true;
+      
+      //layers_[i]->ScheduleLayerCreation(slice_);
     }
   }
 
@@ -464,7 +470,9 @@
     }
 
     assert(layers_[layer] != NULL);
-    layers_[layer]->ScheduleLayerCreation(slice_);
+    changedLayers_[layer] = true;
+
+    //layers_[layer]->ScheduleLayerCreation(slice_);
   }
 
 
@@ -473,7 +481,7 @@
     size_t index;
     if (LookupLayer(index, source))
     {
-      layers_[index]->ScheduleLayerCreation(slice_);
+      InvalidateLayer(index);
     }
   }
   
@@ -486,7 +494,7 @@
       size_t index;
       if (LookupLayer(index, source))
       {
-        layers_[index]->ScheduleLayerCreation(slice_);
+        InvalidateLayer(index);
       }
     }
   }
@@ -521,4 +529,31 @@
       }
     }
   }
+
+
+  void LayerWidget::ResetChangedLayers()
+  {
+    changedLayers_.resize(layers_.size());
+
+    for (size_t i = 0; i < changedLayers_.size(); i++)
+    {
+      changedLayers_[i] = false;
+    }
+  }
+
+
+  void LayerWidget::UpdateContent()
+  {
+    assert(changedLayers_.size() <= layers_.size());
+    
+    for (size_t i = 0; i < changedLayers_.size(); i++)
+    {
+      if (changedLayers_[i])
+      {
+        layers_[i]->ScheduleLayerCreation(slice_);
+      }
+    }
+    
+    ResetChangedLayers();
+  }
 }