Skip to content

Commit

Permalink
Merge pull request mixxxdj#4804 from ronso0/waveform-tiny-range-fix
Browse files Browse the repository at this point in the history
Waveform: avoid QPainter glitch with ranges < 1 px
  • Loading branch information
Swiftb0y authored Jun 22, 2022
2 parents 690e776 + 47a4830 commit 8facfb6
Showing 1 changed file with 6 additions and 2 deletions.
8 changes: 6 additions & 2 deletions src/waveform/renderers/waveformrendermarkrange.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,10 @@ void WaveformRenderMarkRange::draw(QPainter *painter, QPaintEvent * /*event*/) {

double startPosition = m_waveformRenderer->transformSamplePositionInRendererWorld(startSample);
double endPosition = m_waveformRenderer->transformSamplePositionInRendererWorld(endSample);
// The painter would extend the rectangle to the entire width while
// span is < 1 AND span != 0.25 * [1;3], i.e. works with span = [.25; 0.75] px
// TODO(xxx) Figure what's wrong with QPainter / the renderer
const double span = std::max(endPosition - startPosition, 1.0);

//range not in the current display
if (startPosition > m_waveformRenderer->getLength() || endPosition < 0) {
Expand All @@ -78,9 +82,9 @@ void WaveformRenderMarkRange::draw(QPainter *painter, QPaintEvent * /*event*/) {
// this shouldn't involve *any* scaling it should be fast even in software mode
QRectF rect;
if (m_waveformRenderer->getOrientation() == Qt::Horizontal) {
rect.setRect(startPosition, 0, endPosition - startPosition, m_waveformRenderer->getHeight());
rect.setRect(startPosition, 0, span, m_waveformRenderer->getHeight());
} else {
rect.setRect(0, startPosition, m_waveformRenderer->getWidth(), endPosition - startPosition);
rect.setRect(0, startPosition, m_waveformRenderer->getWidth(), span);
}
painter->drawImage(rect, *selectedImage, rect);
}
Expand Down

0 comments on commit 8facfb6

Please sign in to comment.