Mercurial > hg > svgui
comparison layer/SpectrogramLayer.cpp @ 1555:745be36202aa spectrogram-export
Provide export model
author | Chris Cannam |
---|---|
date | Tue, 07 Jan 2020 11:18:43 +0000 |
parents | e6362cf5ff1d |
children | 3b45788b7804 |
comparison
equal
deleted
inserted
replaced
1554:a0b2f3b4dd2f | 1555:745be36202aa |
---|---|
32 | 32 |
33 #include "ColourMapper.h" | 33 #include "ColourMapper.h" |
34 #include "PianoScale.h" | 34 #include "PianoScale.h" |
35 #include "PaintAssistant.h" | 35 #include "PaintAssistant.h" |
36 #include "Colour3DPlotRenderer.h" | 36 #include "Colour3DPlotRenderer.h" |
37 #include "Colour3DPlotExporter.h" | |
37 | 38 |
38 #include <QPainter> | 39 #include <QPainter> |
39 #include <QImage> | 40 #include <QImage> |
40 #include <QPixmap> | 41 #include <QPixmap> |
41 #include <QRect> | 42 #include <QRect> |
140 if (m_verticallyFixed) return; | 141 if (m_verticallyFixed) return; |
141 m_verticallyFixed = true; | 142 m_verticallyFixed = true; |
142 recreateFFTModel(); | 143 recreateFFTModel(); |
143 } | 144 } |
144 | 145 |
146 ModelId | |
147 SpectrogramLayer::getExportModel(LayerGeometryProvider *v) const | |
148 { | |
149 //!!! Creating Colour3DPlotExporters is cheap, so perhaps we | |
150 // should create one on every call - calls probably being | |
151 // infrequent - to avoid having to worry about view lifecycles. We | |
152 // can't delete them on the same call of course as we need to | |
153 // return a valid id, so we could push them onto a list that then | |
154 // gets cleared (with calls to | |
155 // Colour3DPlotExporter::discardSources() and | |
156 // ModelById::release()) in deleteDerivedModels() | |
157 | |
158 Colour3DPlotExporter::Sources sources; | |
159 sources.verticalBinLayer = this; | |
160 sources.fft = m_fftModel; | |
161 sources.source = sources.fft; | |
162 sources.provider = v; | |
163 | |
164 Colour3DPlotExporter::Parameters params; | |
165 params.binDisplay = m_binDisplay; | |
166 | |
167 ModelId exporter = ModelById::add | |
168 (std::make_shared<Colour3DPlotExporter>(sources, params)); | |
169 m_exporters.push_back(exporter); | |
170 return exporter; | |
171 } | |
172 | |
145 void | 173 void |
146 SpectrogramLayer::deleteDerivedModels() | 174 SpectrogramLayer::deleteDerivedModels() |
147 { | 175 { |
148 ModelById::release(m_fftModel); | 176 ModelById::release(m_fftModel); |
149 ModelById::release(m_peakCache); | 177 ModelById::release(m_peakCache); |
150 ModelById::release(m_wholeCache); | 178 ModelById::release(m_wholeCache); |
151 | 179 |
180 for (auto exporterId: m_exporters) { | |
181 if (auto exporter = | |
182 ModelById::getAs<Colour3DPlotExporter>(exporterId)) { | |
183 exporter->discardSources(); | |
184 } | |
185 ModelById::release(exporterId); | |
186 } | |
187 m_exporters.clear(); | |
188 | |
152 m_fftModel = {}; | 189 m_fftModel = {}; |
153 m_peakCache = {}; | 190 m_peakCache = {}; |
154 m_wholeCache = {}; | 191 m_wholeCache = {}; |
155 } | 192 } |
156 | 193 |