void KisScratchPad::paintEvent ( QPaintEvent * event ) { if(!m_paintLayer) return; QRectF imageRect = widgetToDocument().mapRect(QRectF(event->rect())); QRect alignedImageRect = imageRect.adjusted(-m_scaleBorderWidth, -m_scaleBorderWidth, m_scaleBorderWidth, m_scaleBorderWidth).toAlignedRect(); QPointF offset = alignedImageRect.topLeft(); m_paintLayer->updateProjection(alignedImageRect); KisPaintDeviceSP projection = m_paintLayer->projection(); QImage image = projection->convertToQImage(m_displayProfile, alignedImageRect.x(), alignedImageRect.y(), alignedImageRect.width(), alignedImageRect.height(), KoColorConversionTransformation::IntentPerceptual, KoColorConversionTransformation::BlackpointCompensation); QPainter gc(this); gc.fillRect(event->rect(), m_checkBrush); gc.setRenderHints(QPainter::SmoothPixmapTransform); gc.drawImage(QRectF(event->rect()), image, imageRect.translated(-offset)); QBrush brush(Qt::lightGray); QPen pen(brush, 1, Qt::DotLine); gc.setPen(pen); if (m_cutoutOverlay.isValid()) { gc.drawRect(m_cutoutOverlay); } if(!isEnabled()) { QColor color(Qt::lightGray); color.setAlphaF(0.5); QBrush disabledBrush(color); gc.fillRect(event->rect(), disabledBrush); } gc.end(); }
void QgsResidualPlotItem::paint( QPainter *painter, const QStyleOptionGraphicsItem *itemStyle, QWidget *pWidget ) { Q_UNUSED( itemStyle ); Q_UNUSED( pWidget ); if ( mGCPList.size() < 1 || !painter ) { return; } double widthMM = rect().width(); double heightMM = rect().height(); QPen enabledPen( QColor( 255, 0, 0, 255 ), 0.3, Qt::SolidLine, Qt::FlatCap, Qt::MiterJoin ); QPen disabledPen( QColor( 255, 0, 0, 85 ), 0.2, Qt::SolidLine, Qt::FlatCap, Qt::MiterJoin ); QBrush enabledBrush( QColor( 255, 255, 255, 255 ) ); QBrush disabledBrush( QColor( 255, 255, 255, 127 ) ); //draw all points and collect minimal mm/pixel ratio double minMMPixelRatio = DBL_MAX; double mmPixelRatio = 1; painter->setRenderHint( QPainter::Antialiasing, true ); QgsGCPList::const_iterator gcpIt = mGCPList.constBegin(); for ( ; gcpIt != mGCPList.constEnd(); ++gcpIt ) { QgsPointXY gcpCoords = ( *gcpIt )->pixelCoords(); double gcpItemMMX = ( gcpCoords.x() - mExtent.xMinimum() ) / mExtent.width() * widthMM; double gcpItemMMY = ( 1 - ( gcpCoords.y() - mExtent.yMinimum() ) / mExtent.height() ) * heightMM; if ( ( *gcpIt )->isEnabled() ) { painter->setPen( enabledPen ); painter->setBrush( enabledBrush ); } else { painter->setPen( disabledPen ); painter->setBrush( disabledBrush ); } painter->drawRect( QRectF( gcpItemMMX - 0.5, gcpItemMMY - 0.5, 1, 1 ) ); QgsComposerUtils::drawText( painter, QPointF( gcpItemMMX + 2, gcpItemMMY + 2 ), QString::number( ( *gcpIt )->id() ), QFont() ); mmPixelRatio = maxMMToPixelRatioForGCP( *gcpIt, gcpItemMMX, gcpItemMMY ); if ( mmPixelRatio < minMMPixelRatio ) { minMMPixelRatio = mmPixelRatio; } } //draw residual arrows gcpIt = mGCPList.constBegin(); for ( ; gcpIt != mGCPList.constEnd(); ++gcpIt ) { QgsPointXY gcpCoords = ( *gcpIt )->pixelCoords(); double gcpItemMMX = ( gcpCoords.x() - mExtent.xMinimum() ) / mExtent.width() * widthMM; double gcpItemMMY = ( 1 - ( gcpCoords.y() - mExtent.yMinimum() ) / mExtent.height() ) * heightMM; if ( ( *gcpIt )->isEnabled() ) { painter->setPen( enabledPen ); } else { painter->setPen( disabledPen ); } QPointF p1( gcpItemMMX, gcpItemMMY ); QPointF p2( gcpItemMMX + ( *gcpIt )->residual().x() * minMMPixelRatio, gcpItemMMY + ( *gcpIt )->residual().y() * minMMPixelRatio ); painter->drawLine( p1, p2 ); painter->setBrush( QBrush( painter->pen().color() ) ); QgsComposerUtils::drawArrowHead( painter, p2.x(), p2.y(), QgsComposerUtils::angle( p1, p2 ), 1 ); } //draw scale bar double initialScaleBarWidth = rect().width() / 5; double scaleBarWidthUnits = rect().width() / 5 / minMMPixelRatio; //a simple method to round to next nice number int nDecPlaces; if ( scaleBarWidthUnits < 1 ) { nDecPlaces = -floor( log10( scaleBarWidthUnits ) ); scaleBarWidthUnits *= pow( 10.0, nDecPlaces ); scaleBarWidthUnits = ( int )( scaleBarWidthUnits + 0.5 ); scaleBarWidthUnits /= pow( 10.0, nDecPlaces ); } else { nDecPlaces = ( int )log10( scaleBarWidthUnits ); scaleBarWidthUnits /= pow( 10.0, nDecPlaces ); scaleBarWidthUnits = ( int )( scaleBarWidthUnits + 0.5 ); scaleBarWidthUnits *= pow( 10.0, nDecPlaces ); } initialScaleBarWidth = scaleBarWidthUnits * minMMPixelRatio; painter->setPen( QColor( 0, 0, 0 ) ); painter->drawLine( QPointF( 5, rect().height() - 5 ), QPointF( 5 + initialScaleBarWidth, rect().height() - 5 ) ); painter->drawLine( QPointF( 5, rect().height() - 5 ), QPointF( 5, rect().height() - 7 ) ); painter->drawLine( QPointF( 5 + initialScaleBarWidth, rect().height() - 5 ), QPointF( 5 + initialScaleBarWidth, rect().height() - 7 ) ); QFont scaleBarFont; scaleBarFont.setPointSize( 9 ); if ( mConvertScaleToMapUnits ) { QgsComposerUtils::drawText( painter, QPointF( 5, rect().height() - 4 + QgsComposerUtils::fontAscentMM( scaleBarFont ) ), QStringLiteral( "%1 map units" ).arg( scaleBarWidthUnits ), QFont() ); } else { QgsComposerUtils::drawText( painter, QPointF( 5, rect().height() - 4 + QgsComposerUtils::fontAscentMM( scaleBarFont ) ), QStringLiteral( "%1 pixels" ).arg( scaleBarWidthUnits ), QFont() ); } drawFrame( painter ); if ( isSelected() ) { drawSelectionBoxes( painter ); } }