Mercurial > hg > orthanc-stone
diff Framework/Layers/OrthancFrameLayerSource.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 | 5f13809f3f76 |
line wrap: on
line diff
--- a/Framework/Layers/OrthancFrameLayerSource.cpp Tue Nov 06 14:59:20 2018 +0100 +++ b/Framework/Layers/OrthancFrameLayerSource.cpp Tue Nov 06 15:36:06 2018 +0100 @@ -49,18 +49,35 @@ LayerSourceBase::NotifyGeometryError(); } + + class OrthancFrameLayerSource::RendererFactory : public LayerReadyMessage::IRendererFactory + { + private: + const OrthancSlicesLoader::SliceImageReadyMessage& message_; + + public: + RendererFactory(const OrthancSlicesLoader::SliceImageReadyMessage& message) : + message_(message) + { + } + + virtual ILayerRenderer* CreateRenderer() const + { + bool isFull = (message_.GetEffectiveQuality() == SliceImageQuality_FullPng || + message_.GetEffectiveQuality() == SliceImageQuality_FullPam); + + return FrameRenderer::CreateRenderer(message_.GetImage(), message_.GetSlice(), isFull); + } + }; + void OrthancFrameLayerSource::OnSliceImageReady(const OrthancSlicesLoader::SliceImageReadyMessage& message) { // first notify that the image is ready (targeted to, i.e: an image cache) LayerSourceBase::NotifyImageReady(message.GetImage(), message.GetEffectiveQuality(), message.GetSlice()); // then notify that the layer is ready for render - bool isFull = (message.GetEffectiveQuality() == SliceImageQuality_FullPng || - message.GetEffectiveQuality() == SliceImageQuality_FullPam); - - LayerSourceBase::NotifyLayerReady(FrameRenderer::CreateRenderer(message.GetImage(), message.GetSlice(), isFull), - message.GetSlice().GetGeometry()); - + RendererFactory factory(message); + LayerSourceBase::NotifyLayerReady(factory, message.GetSlice().GetGeometry()); } void OrthancFrameLayerSource::OnSliceImageError(const OrthancSlicesLoader::SliceImageErrorMessage& message)