void Fader::paintLinearLevels(QPaintEvent * ev, QPainter & painter) { // peak leds //float fRange = abs( m_fMaxPeak ) + abs( m_fMinPeak ); int height = m_back->height(); int width = m_back->width() / 2; int center = m_back->width() - width; int peak_L = calculateDisplayPeak( m_fPeakValue_L - m_fMinPeak ); int persistentPeak_L = qMax<int>( 3, calculateDisplayPeak( m_persistentPeak_L - m_fMinPeak ) ); painter.drawPixmap( QRect( 0, peak_L, width, height - peak_L ), *m_leds, QRect( 0, peak_L, width, height - peak_L ) ); if( m_persistentPeak_L > 0.05 ) { painter.fillRect( QRect( 2, persistentPeak_L, 7, 1 ), ( m_persistentPeak_L < 1.0 ) ? peakGreen() : peakRed() ); } int peak_R = calculateDisplayPeak( m_fPeakValue_R - m_fMinPeak ); int persistentPeak_R = qMax<int>( 3, calculateDisplayPeak( m_persistentPeak_R - m_fMinPeak ) ); painter.drawPixmap( QRect( center, peak_R, width, height - peak_R ), *m_leds, QRect( center, peak_R, width, height - peak_R ) ); if( m_persistentPeak_R > 0.05 ) { painter.fillRect( QRect( 14, persistentPeak_R, 7, 1 ), ( m_persistentPeak_R < 1.0 ) ? peakGreen() : peakRed() ); } }
void Fader::paintDBFSLevels(QPaintEvent * ev, QPainter & painter) { int height = m_back->height(); int width = m_back->width() / 2; int center = m_back->width() - width; float const maxDB(ampToDbfs(m_fMaxPeak)); float const minDB(ampToDbfs(m_fMinPeak)); // We will need to divide by the span between min and max several times. It's more // efficient to calculate the reciprocal once and then to multiply. float const fullSpanReciprocal = 1 / (maxDB - minDB); // Draw left levels float const leftSpan = ampToDbfs(qMax<float>(0.0001, m_fPeakValue_L)) - minDB; int peak_L = height * leftSpan * fullSpanReciprocal; QRect drawRectL( 0, height - peak_L, width, peak_L ); // Source and target are identical painter.drawPixmap( drawRectL, *m_leds, drawRectL ); float const persistentLeftPeakDBFS = ampToDbfs(qMax<float>(0.0001, m_persistentPeak_L)); int persistentPeak_L = height * (1 - (persistentLeftPeakDBFS - minDB) * fullSpanReciprocal); // the LED's have a 4px padding and we don't want the peaks // to draw on the fader background if( persistentPeak_L <= 4 ) { persistentPeak_L = 4; } if( persistentLeftPeakDBFS > minDB ) { QColor const & peakColor = clips(m_persistentPeak_L) ? peakRed() : persistentLeftPeakDBFS >= -6 ? peakYellow() : peakGreen(); painter.fillRect( QRect( 2, persistentPeak_L, 7, 1 ), peakColor ); } // Draw right levels float const rightSpan = ampToDbfs(qMax<float>(0.0001, m_fPeakValue_R)) - minDB; int peak_R = height * rightSpan * fullSpanReciprocal; QRect const drawRectR( center, height - peak_R, width, peak_R ); // Source and target are identical painter.drawPixmap( drawRectR, *m_leds, drawRectR ); float const persistentRightPeakDBFS = ampToDbfs(qMax<float>(0.0001, m_persistentPeak_R)); int persistentPeak_R = height * (1 - (persistentRightPeakDBFS - minDB) * fullSpanReciprocal); // the LED's have a 4px padding and we don't want the peaks // to draw on the fader background if( persistentPeak_R <= 4 ) { persistentPeak_R = 4; } if( persistentRightPeakDBFS > minDB ) { QColor const & peakColor = clips(m_persistentPeak_R) ? peakRed() : persistentRightPeakDBFS >= -6 ? peakYellow() : peakGreen(); painter.fillRect( QRect( 14, persistentPeak_R, 7, 1 ), peakColor ); } }
void fader::paintEvent( QPaintEvent * ev) { QPainter painter(this); // background painter.drawPixmap( ev->rect(), *s_back, ev->rect() ); // peak leds //float fRange = abs( m_fMaxPeak ) + abs( m_fMinPeak ); int peak_L = calculateDisplayPeak( m_fPeakValue_L - m_fMinPeak ); int persistentPeak_L = qMax<int>( 3, calculateDisplayPeak( m_persistentPeak_L - m_fMinPeak ) ); painter.drawPixmap( QRect( 0, peak_L, 11, 116 - peak_L ), *s_leds, QRect( 0, peak_L, 11, 116 - peak_L ) ); if( m_persistentPeak_L > 0.05 ) { painter.fillRect( QRect( 2, persistentPeak_L, 7, 1 ), ( m_persistentPeak_L < 1.0 ) ? peakGreen() : peakRed() ); } int peak_R = calculateDisplayPeak( m_fPeakValue_R - m_fMinPeak ); int persistentPeak_R = qMax<int>( 3, calculateDisplayPeak( m_persistentPeak_R - m_fMinPeak ) ); painter.drawPixmap( QRect( 11, peak_R, 11, 116 - peak_R ), *s_leds, QRect( 11, peak_R, 11, 116 - peak_R ) ); if( m_persistentPeak_R > 0.05 ) { painter.fillRect( QRect( 14, persistentPeak_R, 7, 1 ), ( m_persistentPeak_R < 1.0 ) ? peakGreen() : peakRed() ); } // knob painter.drawPixmap( 0, knobPosY() - ( *s_knob ).height(), *s_knob ); }