Mercurial > hg > orthanc-stone
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); } }