From 76a12b9bd3a773ae24fcd2c3404d64daa3683ff9 Mon Sep 17 00:00:00 2001 From: Nyall Dawson Date: Fri, 28 Jun 2024 09:21:57 +1000 Subject: [PATCH] Avoid some bleed of masked features outside of layout map extent Partial fix for https://github.com/qgis/QGIS/issues/53542 --- src/core/symbology/qgssymbollayer.cpp | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/src/core/symbology/qgssymbollayer.cpp b/src/core/symbology/qgssymbollayer.cpp index 7cb61d37fa37..139602681be6 100644 --- a/src/core/symbology/qgssymbollayer.cpp +++ b/src/core/symbology/qgssymbollayer.cpp @@ -976,12 +976,18 @@ QPainterPath generateClipPath( const QgsRenderContext &renderContext, const QStr #endif if ( !mergedGeom.isEmpty() ) { - const QgsGeometry exterior = rect - ? QgsGeometry::fromRect( *rect ) - : QgsGeometry::fromRect( - QgsRectangle( 0, 0, - renderContext.outputSize().width(), - renderContext.outputSize().height() ) ); + QgsGeometry exterior; + const QgsRectangle contextBounds( 0, 0, + renderContext.outputSize().width(), + renderContext.outputSize().height() ); + if ( rect ) + { + exterior = QgsGeometry::fromRect( QgsRectangle( *rect ).intersect( contextBounds ) ); + } + else + { + exterior = QgsGeometry::fromRect( contextBounds ); + } const QgsGeometry maskGeom = exterior.difference( mergedGeom ); if ( !maskGeom.isNull() ) {