Mercurial > hg > svgui
comparison layer/SpectrogramLayer.cpp @ 1096:6288f1b5f49b spectrogram-minor-refactor
Far more pragmatic update strategy
| author | Chris Cannam | 
|---|---|
| date | Mon, 11 Jul 2016 14:37:03 +0100 | 
| parents | cd22f74dc159 | 
| children | d9f1d2756b59 | 
   comparison
  equal
  deleted
  inserted
  replaced
| 1095:ba62684a4512 | 1096:6288f1b5f49b | 
|---|---|
| 1554 Colour3DPlotRenderer::RenderResult result = | 1554 Colour3DPlotRenderer::RenderResult result = | 
| 1555 renderer->renderTimeConstrained(v, paint, rect); | 1555 renderer->renderTimeConstrained(v, paint, rect); | 
| 1556 | 1556 | 
| 1557 //!!! + mag range | 1557 //!!! + mag range | 
| 1558 | 1558 | 
| 1559 QRect rendered = result.rendered; | 1559 QRect uncached = renderer->getLargestUncachedRect(); | 
| 1560 if (rendered == rect) { | 1560 if (uncached.width() > 0) { | 
| 1561 cerr << "exiting paint depth " << depth << endl; | 1561 cerr << "updating rect at " << uncached.x() << " width " | 
| 1562 --depth; | 1562 << uncached.width() << endl; | 
| 1563 return; | 1563 v->updatePaintRect(uncached); | 
| 1564 } | |
| 1565 | |
| 1566 int rLeft = rendered.x(); | |
| 1567 int rRight = rendered.x() + rendered.width(); | |
| 1568 | |
| 1569 if (rLeft < rect.x()) { | |
| 1570 rLeft = rect.x(); | |
| 1571 } | |
| 1572 if (rRight > rect.x() + rect.width()) { | |
| 1573 rRight = rect.x() + rect.width(); | |
| 1574 } | |
| 1575 | |
| 1576 QRect areaLeft(rect.x(), rect.y(), | |
| 1577 rLeft - rect.x(), rect.height()); | |
| 1578 | |
| 1579 QRect areaRight(rRight, rect.y(), | |
| 1580 rect.x() + rect.width() - rRight, rect.height()); | |
| 1581 | |
| 1582 bool updateLeft = (areaLeft.width() > 0); | |
| 1583 bool updateRight = (areaRight.width() > 0); | |
| 1584 | |
| 1585 if (updateLeft) { | |
| 1586 if (updateRight) { | |
| 1587 if (areaLeft.width() > areaRight.width()) { | |
| 1588 cerr << "update left then right, widths " | |
| 1589 << areaLeft.width() << " and " | |
| 1590 << areaRight.width() << endl; | |
| 1591 v->updatePaintRect(areaLeft); | |
| 1592 v->updatePaintRect(areaRight); | |
| 1593 } else { | |
| 1594 cerr << "update right then left, widths " | |
| 1595 << areaLeft.width() << " and " | |
| 1596 << areaRight.width() << endl; | |
| 1597 v->updatePaintRect(areaRight); | |
| 1598 v->updatePaintRect(areaLeft); | |
| 1599 } | |
| 1600 } else { | |
| 1601 cerr << "update left, width " << areaLeft.width() << endl; | |
| 1602 v->updatePaintRect(areaLeft); | |
| 1603 } | |
| 1604 } else { | |
| 1605 cerr << "update right, width " << areaRight.width() << endl; | |
| 1606 v->updatePaintRect(areaRight); | |
| 1607 } | 1564 } | 
| 1608 | 1565 | 
| 1609 cerr << "exiting paint depth " << depth << endl; | 1566 cerr << "exiting paint depth " << depth << endl; | 
| 1610 --depth; | 1567 --depth; | 
| 1611 } | 1568 } | 
