/*! Returns the pixel position relative to the reference position for given time \a value */ double UiTimeAxis::timeToPixelRelativeRef(double value) { return timeToPixel(value-mRangeLower) + infoWidth(); }
void timelineWidget::paintEvent( QPaintEvent * ) { if( jLib::math::fcmp( timeInView( ), 0 ) ) { if( endTime() != jLib::floatLimits::infinity() && beginTime() != jLib::floatLimits::infinity() ) { timeInView( endTime() - beginTime() ); viewCentre( ( endTime() + beginTime() ) / 2 ); } else { timeInView( 10 ); viewCentre( 5 ); } } QPainter painter(this); painter.setRenderHint( QPainter::Antialiasing, TRUE ); if( timeInView() > ( endTime( ) - beginTime( ) ) ) { timeInView( endTime( ) - beginTime( ) ); } JFLOAT realBeginDrawing = viewCentre() - ( timeInView()/2 ); JFLOAT realEndDrawing = viewCentre() + ( timeInView()/2 ); if( realEndDrawing > endTime() ) { realEndDrawing = endTime( ); realBeginDrawing = endTime( ) - timeInView( ); viewCentre( endTime( ) - ( timeInView()/2 ) ); } if( realBeginDrawing < beginTime() ) { realBeginDrawing = beginTime( ); realEndDrawing = beginTime( ) + timeInView( ); viewCentre( beginTime( ) + ( timeInView()/2 ) ); } JFLOAT timeSpikeIntervals[] = { 0.125, 0.25, 0.5, 1, 1.25, 2.5, 5, 10, 50 }; JFLOAT timeSpikeInterval = jLib::floatLimits::nan(); JFLOAT minDist = jLib::floatLimits::infinity(); for( int x=0; x<9; x++ ) { JFLOAT size = timeToPixel( timeSpikeIntervals[x], 0, ( realEndDrawing - realBeginDrawing ), width() ); if( ( size - 50.0 ) < minDist ) { timeSpikeInterval = timeSpikeIntervals[x]; minDist = size; } } if( timeSpikeInterval != timeSpikeInterval ) { timeSpikeInterval = 1.0; } JFLOAT beginDrawing = realBeginDrawing - fmod( realBeginDrawing, timeSpikeInterval ) - 1; JFLOAT endDrawing = realEndDrawing + ( timeSpikeInterval - fmod( realEndDrawing, timeSpikeInterval ) ); painter.setPen( QApplication::palette().color( QPalette::Text ) ); for( JFLOAT x=( beginDrawing - timeSpikeInterval ); x<=endDrawing; x+=timeSpikeInterval ) { JFLOAT actualTime = x + 1; JFLOAT xMidPos = timeToPixel( actualTime + ( 0.5 * timeSpikeInterval ), realBeginDrawing, realEndDrawing, width() ); painter.drawLine( QPointF( xMidPos, height() ), QPointF( xMidPos, height() - minorTimeHeight() ) ); JFLOAT xPos = timeToPixel( actualTime, realBeginDrawing, realEndDrawing, width() ); painter.drawText( (int)(xPos+2), (int)(height() - majorTimeHeight()-5), formatTime( actualTime ) ); painter.drawLine( QPointF( xPos, height() ), QPointF( xPos, height() - majorTimeHeight() ) ); } QColor clipColourA( QApplication::palette().color( QPalette::Shadow ) ); clipColourA.setAlpha( 200 ); QColor clipColourB( QApplication::palette().color( QPalette::Shadow ) ); clipColourB.setAlpha(100 ); QLinearGradient clipGrad( 0, 0, 0, height() ); clipGrad.setColorAt( 0.0, clipColourA ); clipGrad.setColorAt( 1.0, clipColourB ); QPen clipLine( QApplication::palette().color( QPalette::Shadow ) ); clipLine.setWidthF( 1.5 ); if( clipBegin() > realBeginDrawing ) { JFLOAT clipBeginPix = timeToPixel( clipBegin(), realBeginDrawing, realEndDrawing, width() ); painter.setPen( Qt::transparent ); painter.setBrush( clipGrad ); painter.drawRect( 0, 0, (int)clipBeginPix, (int)height() ); painter.setPen( clipLine ); painter.drawLine( (int)(clipBeginPix+1), 0, (int)(clipBeginPix+1), height() ); } if( clipEnd() < realEndDrawing ) { JFLOAT clipEndPix = timeToPixel( clipEnd(), realBeginDrawing, realEndDrawing, width() ); if( clipEndPix < 0 ) { clipEndPix = 0; } painter.setPen( Qt::transparent ); painter.setBrush( clipGrad ); painter.drawRect( (int)clipEndPix, 0, width(), height() ); painter.setPen( clipLine ); painter.drawLine( (int)clipEndPix, 0, (int)clipEndPix, height() ); } JFLOAT now = timeToPixel( currentTime(), realBeginDrawing, realEndDrawing, width() ); QColor nowColour = QApplication::palette().color( QPalette::Highlight ); nowColour.setAlpha( 200 ); QPen nowPen( nowColour ); nowPen.setWidthF( 2.5 ); painter.setPen( nowPen ); painter.drawLine( QPointF( now, 0 ), QPointF( now, height() ) ); painter.setPen( QApplication::palette().color( QPalette::Text ) ); painter.drawText( (int)(now+2), (int)(height() - majorTimeHeight()-20), formatTime( currentTime() ) ); nowColour.setAlpha( 150 ); QLinearGradient highlight( now, 0, now-_nowGradientSpread, 0 ); highlight.setColorAt(0, nowColour ); highlight.setColorAt(1, Qt::transparent ); painter.fillRect( QRectF( now-_nowGradientSpread, 0, _nowGradientSpread, height() ), highlight ); }