comparison layer/Colour3DPlotRenderer.cpp @ 1325:bc2cb82050a0 zoom

Gradual ZoomLevel updates
author Chris Cannam
date Wed, 19 Sep 2018 15:42:22 +0100
parents a34a2a25907c
children 344f29e46258
comparison
equal deleted inserted replaced
1324:13d9b422f7fe 1325:bc2cb82050a0
30 30
31 #include "view/ViewManager.h" // for main model sample rate. Pity 31 #include "view/ViewManager.h" // for main model sample rate. Pity
32 32
33 #include <vector> 33 #include <vector>
34 34
35 //#define DEBUG_COLOUR_PLOT_REPAINT 1 35 #include <utility>
36 using namespace std::rel_ops;
37
38 #define DEBUG_COLOUR_PLOT_REPAINT 1
36 39
37 using namespace std; 40 using namespace std;
38 41
39 Colour3DPlotRenderer::RenderResult 42 Colour3DPlotRenderer::RenderResult
40 Colour3DPlotRenderer::render(const LayerGeometryProvider *v, QPainter &paint, QRect rect) 43 Colour3DPlotRenderer::render(const LayerGeometryProvider *v, QPainter &paint, QRect rect)
313 if (!model || !v || !(v->getViewManager())) { 316 if (!model || !v || !(v->getViewManager())) {
314 return DrawBufferPixelResolution; // or anything 317 return DrawBufferPixelResolution; // or anything
315 } 318 }
316 319
317 int binResolution = model->getResolution(); 320 int binResolution = model->getResolution();
318 int zoomLevel = v->getZoomLevel(); 321 ZoomLevel zoomLevel = v->getZoomLevel();
319 sv_samplerate_t modelRate = model->getSampleRate(); 322 sv_samplerate_t modelRate = model->getSampleRate();
320 323
321 double rateRatio = v->getViewManager()->getMainModelSampleRate() / modelRate; 324 double rateRatio = v->getViewManager()->getMainModelSampleRate() / modelRate;
322 double relativeBinResolution = binResolution * rateRatio; 325 double relativeBinResolution = binResolution * rateRatio;
323 326
330 333
331 // consider translucent option -- only if not smoothing & not 334 // consider translucent option -- only if not smoothing & not
332 // explicitly requested opaque & sufficiently zoomed-in 335 // explicitly requested opaque & sufficiently zoomed-in
333 336
334 if (model->getHeight() * 3 < v->getPaintHeight() && 337 if (model->getHeight() * 3 < v->getPaintHeight() &&
335 relativeBinResolution >= 3 * zoomLevel) { 338 zoomLevel < ZoomLevel(ZoomLevel::FramesPerPixel,
339 int(round(relativeBinResolution / 3)))) {
336 return DirectTranslucent; 340 return DirectTranslucent;
337 } 341 }
338 } 342 }
339 343
340 if (relativeBinResolution > zoomLevel) { 344 if (ZoomLevel(ZoomLevel::FramesPerPixel,
345 int(round(relativeBinResolution))) > zoomLevel) {
341 return DrawBufferBinResolution; 346 return DrawBufferBinResolution;
342 } else { 347 } else {
343 return DrawBufferPixelResolution; 348 return DrawBufferPixelResolution;
344 } 349 }
345 } 350 }
553 const DenseThreeDimensionalModel *model = m_sources.source; 558 const DenseThreeDimensionalModel *model = m_sources.source;
554 if (!model) return; 559 if (!model) return;
555 if (m_params.binDisplay == BinDisplay::PeakFrequencies) return; 560 if (m_params.binDisplay == BinDisplay::PeakFrequencies) return;
556 if (m_params.colourScale.getScale() == ColourScaleType::Phase) return; 561 if (m_params.colourScale.getScale() == ColourScaleType::Phase) return;
557 562
558 int zoomLevel = v->getZoomLevel(); 563 ZoomLevel zoomLevel = v->getZoomLevel();
559 int binResolution = model->getResolution(); 564 int binResolution = model->getResolution();
560 565
561 for (int ix = 0; in_range_for(m_sources.peakCaches, ix); ++ix) { 566 for (int ix = 0; in_range_for(m_sources.peakCaches, ix); ++ix) {
562 int bpp = m_sources.peakCaches[ix]->getColumnsPerPeak(); 567 int bpp = m_sources.peakCaches[ix]->getColumnsPerPeak();
563 int equivZoom = binResolution * bpp; 568 ZoomLevel equivZoom(ZoomLevel::FramesPerPixel, binResolution * bpp);
564 if (zoomLevel >= equivZoom) { 569 if (zoomLevel >= equivZoom) {
565 // this peak cache would work, though it might not be best 570 // this peak cache would work, though it might not be best
566 if (bpp > binsPerPeak) { 571 if (bpp > binsPerPeak) {
567 // ok, it's better than the best one we've found so far 572 // ok, it's better than the best one we've found so far
568 peakCacheIndex = ix; 573 peakCacheIndex = ix;