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,