Mercurial > hg > orthanc-stone
comparison 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 |
comparison
equal
deleted
inserted
replaced
380:ba5ad93f935a | 381:19bd222283ae |
---|---|
47 void OrthancFrameLayerSource::OnSliceGeometryError(const OrthancSlicesLoader::SliceGeometryErrorMessage& message) | 47 void OrthancFrameLayerSource::OnSliceGeometryError(const OrthancSlicesLoader::SliceGeometryErrorMessage& message) |
48 { | 48 { |
49 LayerSourceBase::NotifyGeometryError(); | 49 LayerSourceBase::NotifyGeometryError(); |
50 } | 50 } |
51 | 51 |
52 | |
53 class OrthancFrameLayerSource::RendererFactory : public LayerReadyMessage::IRendererFactory | |
54 { | |
55 private: | |
56 const OrthancSlicesLoader::SliceImageReadyMessage& message_; | |
57 | |
58 public: | |
59 RendererFactory(const OrthancSlicesLoader::SliceImageReadyMessage& message) : | |
60 message_(message) | |
61 { | |
62 } | |
63 | |
64 virtual ILayerRenderer* CreateRenderer() const | |
65 { | |
66 bool isFull = (message_.GetEffectiveQuality() == SliceImageQuality_FullPng || | |
67 message_.GetEffectiveQuality() == SliceImageQuality_FullPam); | |
68 | |
69 return FrameRenderer::CreateRenderer(message_.GetImage(), message_.GetSlice(), isFull); | |
70 } | |
71 }; | |
72 | |
52 void OrthancFrameLayerSource::OnSliceImageReady(const OrthancSlicesLoader::SliceImageReadyMessage& message) | 73 void OrthancFrameLayerSource::OnSliceImageReady(const OrthancSlicesLoader::SliceImageReadyMessage& message) |
53 { | 74 { |
54 // first notify that the image is ready (targeted to, i.e: an image cache) | 75 // first notify that the image is ready (targeted to, i.e: an image cache) |
55 LayerSourceBase::NotifyImageReady(message.GetImage(), message.GetEffectiveQuality(), message.GetSlice()); | 76 LayerSourceBase::NotifyImageReady(message.GetImage(), message.GetEffectiveQuality(), message.GetSlice()); |
56 | 77 |
57 // then notify that the layer is ready for render | 78 // then notify that the layer is ready for render |
58 bool isFull = (message.GetEffectiveQuality() == SliceImageQuality_FullPng || | 79 RendererFactory factory(message); |
59 message.GetEffectiveQuality() == SliceImageQuality_FullPam); | 80 LayerSourceBase::NotifyLayerReady(factory, message.GetSlice().GetGeometry()); |
60 | |
61 LayerSourceBase::NotifyLayerReady(FrameRenderer::CreateRenderer(message.GetImage(), message.GetSlice(), isFull), | |
62 message.GetSlice().GetGeometry()); | |
63 | |
64 } | 81 } |
65 | 82 |
66 void OrthancFrameLayerSource::OnSliceImageError(const OrthancSlicesLoader::SliceImageErrorMessage& message) | 83 void OrthancFrameLayerSource::OnSliceImageError(const OrthancSlicesLoader::SliceImageErrorMessage& message) |
67 { | 84 { |
68 LayerSourceBase::NotifyLayerError(message.GetSlice().GetGeometry()); | 85 LayerSourceBase::NotifyLayerError(message.GetSlice().GetGeometry()); |