void SignalDisplay::DrawSignalField2d( const PaintInfo& p ) { int sampleBegin = 0, sampleEnd = mNumSamples; if( p.updateRgn ) { // We restrict drawing to the actually requested update region. QRect clipRect = p.updateRgn->boundingRect(); sampleBegin = PosToSample( clipRect.left() ); sampleBegin = max( sampleBegin - 1, 0 ); sampleEnd = PosToSample( clipRect.right() + 1 ); sampleEnd = min( sampleEnd + 1, mNumSamples ); } for( int i = 0; i < mNumDisplayChannels; ++i ) { for( int j = sampleBegin; j < sampleEnd; ++j ) { bool draw = true; double dataValue = NormData( i + mTopGroup * mChannelGroupSize, j ); if( dataValue < 0.0 ) dataValue = 0.0; else if( dataValue > 1.0 ) dataValue = 1.0; else if( IsNaN( dataValue ) ) dataValue = 0.0; QRect dotRect( SampleLeft( j ), ChannelTop( i ), SampleRight( j ) - SampleLeft( j ), ChannelBottom( i ) - ChannelTop( i ) ); RGBColor rgb; if( mDisplayColors ) rgb = RGBColor::FromHSV( dataValue - 1.0 / 3.0, 1.0, dataValue ); else rgb = RGBColor::FromHSV( 0.0, 0.0, dataValue ); p.painter->fillRect( dotRect, QColor( rgb.R(), rgb.G(), rgb.B() ) ); } # ifdef _WIN32 ::Sleep( 0 ); # endif // _WIN32 } }
void TextField::DoPaint( const GUI::DrawContext& inDC, RGBColor inTextColor, RGBColor inBackgroundColor ) { #if USE_QT QPainter* p = inDC.handle.painter; QRect rect( static_cast<int>( inDC.rect.left ), static_cast<int>( inDC.rect.top ), static_cast<int>( inDC.rect.right - inDC.rect.left ), static_cast<int>( inDC.rect.bottom - inDC.rect.top ) ); QBrush brush; brush.setStyle( Qt::SolidPattern ); if( mColor != RGBColor( RGBColor::NullColor ) ) { QColor backColor( mColor.R(), mColor.G(), mColor.B() ); brush.setColor( backColor ); p->fillRect( rect, brush ); } QFont font; font.fromString( QString( "Arial" ) ); font.setPixelSize( static_cast<int>( mTextHeight * ( inDC.rect.bottom - inDC.rect.top ) ) ); font.setBold( true ); QColor textColor( inTextColor.R(), inTextColor.G(), inTextColor.B() ); QPen pen; brush.setColor( textColor ); pen.setColor( textColor ); p->setPen( pen ); p->setBrush( brush ); p->setFont( font ); QString text = QString::fromLocal8Bit( mText.c_str() ); text.append( " " ).prepend( " " ); p->drawText( rect, Qt::AlignCenter, text ); #endif // USE_QT }
void SignalDisplay::DrawChannelLabels( const PaintInfo& p ) { p.painter->setFont( p.labelFont ); if( mShowChannelLabels && mChannelGroupSize > 1 ) { // Draw channel labels when channels don't coincide with groups. p.painter->setBackground( p.backgroundColor ); p.painter->setBackgroundMode( Qt::OpaqueMode ); QRect legendRect; for( size_t i = 0; i < mChannelLabels.size(); ++i ) { RGBColor textColor = ChannelColor( mChannelLabels[ i ].Address() ); if( mInverted && textColor == RGBColor::White ) textColor = RGBColor::Black; p.painter->setPen( QColor( textColor.R(), textColor.G(), textColor.B() ) ); p.painter->drawText( legendRect, Qt::TextSingleLine | Qt::AlignLeft | Qt::TextDontClip, mChannelLabels[ i ].Text().c_str() ); legendRect.setTop( legendRect.top() + p.painter->fontMetrics().height() ); } } }
void SignalDisplay::SetupPainting( PaintInfo& p, const void* inUpdateRgn ) { SyncGraphics(); p.updateRgn = reinterpret_cast<const QRegion*>( inUpdateRgn ); p.painter = new QPainter( mTargetDC ); p.painter->setRenderHint( QPainter::Antialiasing, false ); p.painter->setRenderHint( QPainter::TextAntialiasing, false ); p.signalPens.resize( mData.Channels() ); p.signalBrushes.resize( mData.Channels() ); // Background properties RGBColor c = mInverted ? RGBColor::White : RGBColor::Black; p.backgroundColor = QColor( c.R(), c.G(), c.B() ); p.backgroundBrush = QBrush( p.backgroundColor ); // Cursor properties p.cursorWidth = 3; c = RGBColor::Yellow; p.cursorColor = QColor( c.R(), c.G(), c.B() ); p.cursorBrush = QBrush( p.cursorColor ); // Axis properties RGBColor axisColor = mAxisColor; if( mInverted && ( axisColor == RGBColor::White ) ) axisColor = RGBColor::Black; QColor qAxisColor( axisColor.R(), axisColor.G(), axisColor.B() ); p.axisBrush = QBrush( qAxisColor ); p.axisY = GroupBottom( mNumDisplayGroups - 1 ); p.markerWidth = 1; p.baselinePen = QPen( qAxisColor ); c = RGBColor( mInverted ? RGBColor::Black : RGBColor::White ); p.markerColor = QColor( c.R(), c.G(), c.B() ); p.markerBrush = QBrush( p.markerColor ); p.labelColor = qAxisColor; p.labelFont = AxisFont(); p.monoFont = MonoFont(); // Signal properties if( mDisplayColors ) for( int i = 0; i < mData.Channels(); ++i ) { RGBColor channelColor = ChannelColor( i ); if( mInverted && channelColor == RGBColor::White ) channelColor = RGBColor::Black; QColor c( channelColor.R(), channelColor.G(), channelColor.B() ); p.signalPens[ i ] = QPen( c ); p.signalBrushes[ i ] = QBrush( c ); } else { RGBColor channelColor = mInverted? RGBColor::Black : RGBColor::White; QColor c( channelColor.R(), channelColor.G(), channelColor.B() ); QPen pen( c ); for( int i = 0; i < mData.Channels(); ++i ) p.signalPens[ i ] = pen; } }