Mercurial > hg > orthanc-stone
diff Framework/SmartLoader.cpp @ 381:19bd222283ae
uncoupling LayerReadyMessage from the creation of the renderer
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Tue, 06 Nov 2018 15:36:06 +0100 |
parents | ba5ad93f935a |
children | 20f149669c1f |
line wrap: on
line diff
--- a/Framework/SmartLoader.cpp Tue Nov 06 14:59:20 2018 +0100 +++ b/Framework/SmartLoader.cpp Tue Nov 06 15:36:06 2018 +0100 @@ -40,6 +40,26 @@ class SmartLoader::CachedSlice : public LayerSourceBase { public: + class RendererFactory : public LayerReadyMessage::IRendererFactory + { + private: + const CachedSlice& that_; + + public: + RendererFactory(const CachedSlice& that) : + that_(that) + { + } + + virtual ILayerRenderer* CreateRenderer() const + { + bool isFull = (that_.effectiveQuality_ == SliceImageQuality_FullPng || + that_.effectiveQuality_ == SliceImageQuality_FullPam); + + return FrameRenderer::CreateRenderer(*that_.image_, *that_.slice_, isFull); + } + }; + unsigned int sliceIndex_; std::auto_ptr<Slice> slice_; boost::shared_ptr<Orthanc::ImageAccessor> image_; @@ -73,10 +93,9 @@ if (status_ == CachedSliceStatus_ImageLoaded) { LOG(WARNING) << "ScheduleLayerCreation for CachedSlice (image is loaded): " << slice_->GetOrthancInstanceId(); - bool isFull = (effectiveQuality_ == SliceImageQuality_FullPng || - effectiveQuality_ == SliceImageQuality_FullPam); - LayerSourceBase::NotifyLayerReady(FrameRenderer::CreateRenderer(*image_, *slice_, isFull), - slice_->GetGeometry()); + + RendererFactory factory(*this); + LayerSourceBase::NotifyLayerReady(factory, slice_->GetGeometry()); } else {