Mercurial > hg > orthanc-stone
comparison 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 |
comparison
equal
deleted
inserted
replaced
89:f244018a4e4b | 90:64e60018943f |
---|---|
104 { | 104 { |
105 bool fullQuality = true; | 105 bool fullQuality = true; |
106 | 106 |
107 for (size_t i = 0; i < renderers_.size(); i++) | 107 for (size_t i = 0; i < renderers_.size(); i++) |
108 { | 108 { |
109 if (renderers_[i] != NULL) | |
110 { | |
111 LOG(ERROR) << "..............."; | |
112 } | |
113 | |
114 if (renderers_[i] != NULL && | 109 if (renderers_[i] != NULL && |
115 !renderers_[i]->RenderLayer(context, view, slice_)) | 110 !renderers_[i]->RenderLayer(context, view, slice_)) |
116 { | 111 { |
117 return false; | 112 return false; |
118 } | 113 } |
349 layers_.push_back(layer); | 344 layers_.push_back(layer); |
350 styles_.push_back(RenderStyle()); | 345 styles_.push_back(RenderStyle()); |
351 layersIndex_[layer] = index; | 346 layersIndex_[layer] = index; |
352 | 347 |
353 ResetPendingScene(); | 348 ResetPendingScene(); |
354 LOG(ERROR) << "*****************************"; | 349 layer->Register(*this); |
355 layer->SetObserver(*this); | |
356 | 350 |
357 return index; | 351 return index; |
358 } | 352 } |
359 | 353 |
360 | 354 |
383 } | 377 } |
384 | 378 |
385 | 379 |
386 void LayerWidget::SetSlice(const SliceGeometry& slice) | 380 void LayerWidget::SetSlice(const SliceGeometry& slice) |
387 { | 381 { |
388 if (currentScene_.get() == NULL || | 382 Slice displayedSlice(slice_, THIN_SLICE_THICKNESS); |
389 (pendingScene_.get() != NULL && | 383 |
390 pendingScene_->IsComplete())) | 384 if (!displayedSlice.ContainsPlane(slice)) |
391 { | 385 { |
392 currentScene_ = pendingScene_; | 386 if (currentScene_.get() == NULL || |
393 } | 387 (pendingScene_.get() != NULL && |
394 | 388 pendingScene_->IsComplete())) |
395 slice_ = slice; | 389 { |
396 ResetPendingScene(); | 390 currentScene_ = pendingScene_; |
397 } | 391 } |
398 | 392 |
393 slice_ = slice; | |
394 ResetPendingScene(); | |
395 | |
396 InvalidateAllLayers(); | |
397 } | |
398 } | |
399 | |
400 | |
401 void LayerWidget::NotifyGeometryReady(const ILayerSource& source) | |
402 { | |
403 size_t i; | |
404 if (LookupLayer(i, source)) | |
405 { | |
406 LOG(INFO) << "Geometry ready for layer " << i; | |
407 layers_[i]->ScheduleLayerCreation(slice_); | |
408 } | |
409 } | |
410 | |
411 | |
412 void LayerWidget::NotifyGeometryError(const ILayerSource& source) | |
413 { | |
414 LOG(ERROR) << "Cannot get geometry"; | |
415 } | |
416 | |
399 | 417 |
400 void LayerWidget::InvalidateAllLayers() | 418 void LayerWidget::InvalidateAllLayers() |
401 { | 419 { |
402 for (size_t i = 0; i < layers_.size(); i++) | 420 for (size_t i = 0; i < layers_.size(); i++) |
403 { | 421 { |
441 } | 459 } |
442 } | 460 } |
443 } | 461 } |
444 | 462 |
445 | 463 |
446 void LayerWidget::NotifyLayerReady(ILayerRenderer* renderer, | 464 void LayerWidget::NotifyLayerReady(std::auto_ptr<ILayerRenderer>& renderer, |
447 const ILayerSource& source, | 465 const ILayerSource& source, |
448 const Slice& slice) | 466 const Slice& slice) |
449 { | 467 { |
450 std::auto_ptr<ILayerRenderer> tmp(renderer); | |
451 | |
452 size_t index; | 468 size_t index; |
453 if (LookupLayer(index, source) && | 469 if (LookupLayer(index, source) && |
454 slice.ContainsPlane(slice_)) // Whether the slice comes from an older request | 470 slice.ContainsPlane(slice_)) // Whether the slice comes from an older request |
455 { | 471 { |
456 LOG(INFO) << "Renderer ready for layer " << index; | 472 LOG(INFO) << "Renderer ready for layer " << index; |
457 UpdateLayer(index, tmp.release(), slice); | 473 UpdateLayer(index, renderer.release(), slice); |
458 } | 474 } |
459 } | 475 } |
460 | 476 |
461 | 477 |
462 void LayerWidget::NotifyLayerError(const ILayerSource& source, | 478 void LayerWidget::NotifyLayerError(const ILayerSource& source, |