Skip to content

Commit

Permalink
Be more respectful of the render context's antialias flag, and
Browse files Browse the repository at this point in the history
avoid incorrectly antialiasing rendering of certain objects (such
as map labels) when not wanted

Fixes #36964
  • Loading branch information
nyalldawson committed Jun 8, 2020
1 parent da904fb commit bab8384
Show file tree
Hide file tree
Showing 10 changed files with 33 additions and 21 deletions.
3 changes: 2 additions & 1 deletion src/app/decorations/qgsdecorationcopyright.cpp
Expand Up @@ -117,7 +117,8 @@ void QgsDecorationCopyright::render( const QgsMapSettings &mapSettings, QgsRende
return;

context.painter()->save();
context.painter()->setRenderHint( QPainter::Antialiasing, true );
if ( context.flags() & QgsRenderContext::Antialiasing )
context.painter()->setRenderHint( QPainter::Antialiasing, true );

QString displayString = QgsExpression::replaceExpressionText( mLabelText, &context.expressionContext() );
QStringList displayStringList = displayString.split( '\n' );
Expand Down
3 changes: 2 additions & 1 deletion src/app/decorations/qgsdecorationlayoutextent.cpp
Expand Up @@ -121,7 +121,8 @@ void QgsDecorationLayoutExtent::render( const QgsMapSettings &mapSettings, QgsRe
return;

context.painter()->save();
context.painter()->setRenderHint( QPainter::Antialiasing, true );
if ( context.flags() & QgsRenderContext::Antialiasing )
context.painter()->setRenderHint( QPainter::Antialiasing, true );
mSymbol->startRender( context );

const QgsMapToPixel &m2p = mapSettings.mapToPixel();
Expand Down
3 changes: 2 additions & 1 deletion src/app/decorations/qgsdecorationtitle.cpp
Expand Up @@ -106,7 +106,8 @@ void QgsDecorationTitle::render( const QgsMapSettings &mapSettings, QgsRenderCon
return;

context.painter()->save();
context.painter()->setRenderHint( QPainter::Antialiasing, true );
if ( context.flags() & QgsRenderContext::Antialiasing )
context.painter()->setRenderHint( QPainter::Antialiasing, true );

QString displayString = QgsExpression::replaceExpressionText( mLabelText, &context.expressionContext() );
QStringList displayStringList = displayString.split( '\n' );
Expand Down
3 changes: 2 additions & 1 deletion src/core/labeling/qgslabelingengine.cpp
Expand Up @@ -405,7 +405,8 @@ void QgsLabelingEngine::drawLabels( QgsRenderContext &context, const QString &la

const QgsLabelingEngineSettings &settings = mMapSettings.labelingEngineSettings();
QPainter *painter = context.painter();
painter->setRenderHint( QPainter::Antialiasing );
if ( context.flags() & QgsRenderContext::Antialiasing )
painter->setRenderHint( QPainter::Antialiasing );

// prepare for rendering
for ( QgsAbstractLabelProvider *provider : qgis::as_const( mProviders ) )
Expand Down
6 changes: 4 additions & 2 deletions src/core/layertree/qgslayertreemodellegendnode.cpp
Expand Up @@ -584,7 +584,8 @@ QSizeF QgsSymbolLegendNode::drawSymbol( const QgsLegendSettings &settings, ItemC
opacity = static_cast<int >( std::round( 255 * vectorLayer->opacity() ) );

p->save();
p->setRenderHint( QPainter::Antialiasing );
if ( context->flags() & QgsRenderContext::Antialiasing )
p->setRenderHint( QPainter::Antialiasing );

switch ( settings.symbolAlignment() )
{
Expand Down Expand Up @@ -613,7 +614,8 @@ QSizeF QgsSymbolLegendNode::drawSymbol( const QgsLegendSettings &settings, ItemC
QImage tempImage = QImage( tempImageSize, QImage::Format_ARGB32 );
tempImage.fill( Qt::transparent );
QPainter imagePainter( &tempImage );
imagePainter.setRenderHint( QPainter::Antialiasing );
if ( context->flags() & QgsRenderContext::Antialiasing )
imagePainter.setRenderHint( QPainter::Antialiasing );
context->setPainter( &imagePainter );
imagePainter.translate( maxBleed, maxBleed );
s->drawPreviewIcon( &imagePainter, symbolSize, context, false, nullptr, &patchShape );
Expand Down
8 changes: 8 additions & 0 deletions src/core/layout/qgslayoutitem.cpp
Expand Up @@ -1216,6 +1216,10 @@ void QgsLayoutItem::drawFrame( QgsRenderContext &context )
p->save();
p->setPen( pen() );
p->setBrush( Qt::NoBrush );

if ( context.flags() & QgsRenderContext::Antialiasing )
p->setRenderHint( QPainter::Antialiasing, true );

p->drawRect( QRectF( 0, 0, rect().width(), rect().height() ) );
p->restore();
}
Expand All @@ -1229,6 +1233,10 @@ void QgsLayoutItem::drawBackground( QgsRenderContext &context )
p->save();
p->setBrush( brush() );
p->setPen( Qt::NoPen );

if ( context.flags() & QgsRenderContext::Antialiasing )
p->setRenderHint( QPainter::Antialiasing, true );

p->drawRect( QRectF( 0, 0, rect().width(), rect().height() ) );
p->restore();
}
Expand Down
20 changes: 8 additions & 12 deletions src/core/layout/qgslayoutitemmap.cpp
Expand Up @@ -2239,25 +2239,21 @@ void QgsLayoutItemMap::drawMapFrame( QPainter *p )
{
if ( frameEnabled() && p )
{
p->save();
p->setPen( pen() );
p->setBrush( Qt::NoBrush );
p->setRenderHint( QPainter::Antialiasing, true );
p->drawRect( QRectF( 0, 0, rect().width(), rect().height() ) );
p->restore();
QgsRenderContext rc = QgsLayoutUtils::createRenderContextForMap( this, p );
rc.setExpressionContext( createExpressionContext() );

QgsLayoutItem::drawFrame( rc );
}
}

void QgsLayoutItemMap::drawMapBackground( QPainter *p )
{
if ( hasBackground() && p )
{
p->save();
p->setBrush( brush() );//this causes a problem in atlas generation
p->setPen( Qt::NoPen );
p->setRenderHint( QPainter::Antialiasing, true );
p->drawRect( QRectF( 0, 0, rect().width(), rect().height() ) );
p->restore();
QgsRenderContext rc = QgsLayoutUtils::createRenderContextForMap( this, p );
rc.setExpressionContext( createExpressionContext() );

QgsLayoutItem::drawBackground( rc );
}
}

Expand Down
2 changes: 1 addition & 1 deletion src/core/layout/qgslayoutitemmapgrid.cpp
Expand Up @@ -720,7 +720,7 @@ void QgsLayoutItemMapGrid::drawGridFrame( QPainter *p, const QList< QPair< doubl
if ( p )
{
p->save();
p->setRenderHint( QPainter::Antialiasing );
p->setRenderHint( QPainter::Antialiasing, mMap->layout()->renderContext().flags() & QgsLayoutRenderContext::FlagAntialiasing );
}

//Sort the coordinate positions for each side
Expand Down
3 changes: 2 additions & 1 deletion src/core/layout/qgslayoutitemmapoverview.cpp
Expand Up @@ -109,7 +109,8 @@ void QgsLayoutItemMapOverview::draw( QPainter *painter )
painter->setCompositionMode( mBlendMode );
painter->translate( mMap->mXOffset, mMap->mYOffset );
painter->scale( 1 / dotsPerMM, 1 / dotsPerMM ); // scale painter from mm to dots
painter->setRenderHint( QPainter::Antialiasing );
if ( context.flags() & QgsRenderContext::Antialiasing )
painter->setRenderHint( QPainter::Antialiasing );

mFrameSymbol->startRender( context );

Expand Down
3 changes: 2 additions & 1 deletion src/core/symbology/qgssymbollayerutils.cpp
Expand Up @@ -773,7 +773,8 @@ QPixmap QgsSymbolLayerUtils::symbolPreviewPixmap( const QgsSymbol *symbol, QSize
pixmap.fill( Qt::transparent );
QPainter painter;
painter.begin( &pixmap );
painter.setRenderHint( QPainter::Antialiasing );
if ( !customContext || customContext->flags() & QgsRenderContext::Antialiasing )
painter.setRenderHint( QPainter::Antialiasing );

if ( customContext )
{
Expand Down

0 comments on commit bab8384

Please sign in to comment.