diff --git a/python/core/auto_generated/qgsmaplayerrenderer.sip.in b/python/core/auto_generated/qgsmaplayerrenderer.sip.in index 22f92c13fd2..078bdcf6c8d 100644 --- a/python/core/auto_generated/qgsmaplayerrenderer.sip.in +++ b/python/core/auto_generated/qgsmaplayerrenderer.sip.in @@ -62,6 +62,13 @@ Returns list of errors (problems) that happened during the rendering QString layerId() const; %Docstring Gets access to the ID of the layer rendered by this class +%End + + virtual void setPainter( QPainter *painter ); +%Docstring +Resets the painter to use for the job to a new ``painter``. + +.. versionadded:: 3.10 %End protected: diff --git a/src/core/mesh/qgsmeshlayerrenderer.cpp b/src/core/mesh/qgsmeshlayerrenderer.cpp index b2c5e601d84..c0bd6c9e6d3 100644 --- a/src/core/mesh/qgsmeshlayerrenderer.cpp +++ b/src/core/mesh/qgsmeshlayerrenderer.cpp @@ -57,6 +57,11 @@ QgsMeshLayerRenderer::QgsMeshLayerRenderer( QgsMeshLayer *layer, QgsRenderContex calculateOutputSize(); } +void QgsMeshLayerRenderer::setPainter( QPainter *painter ) +{ + mContext.setPainter( painter ); +} + QgsFeedback *QgsMeshLayerRenderer::feedback() const { return mFeedback.get(); diff --git a/src/core/mesh/qgsmeshlayerrenderer.h b/src/core/mesh/qgsmeshlayerrenderer.h index 1e9a4b0d1f0..6c72a6a286d 100644 --- a/src/core/mesh/qgsmeshlayerrenderer.h +++ b/src/core/mesh/qgsmeshlayerrenderer.h @@ -88,6 +88,7 @@ class QgsMeshLayerRenderer : public QgsMapLayerRenderer //! Ctor QgsMeshLayerRenderer( QgsMeshLayer *layer, QgsRenderContext &context ); ~QgsMeshLayerRenderer() override = default; + void setPainter( QPainter *painter ) override; QgsFeedback *feedback() const override; bool render() override; diff --git a/src/core/qgsmaplayerrenderer.h b/src/core/qgsmaplayerrenderer.h index b95aad5e37e..eae7f7ca411 100644 --- a/src/core/qgsmaplayerrenderer.h +++ b/src/core/qgsmaplayerrenderer.h @@ -21,6 +21,7 @@ #include "qgis_core.h" class QgsFeedback; +class QPainter; /** * \ingroup core @@ -66,6 +67,13 @@ class CORE_EXPORT QgsMapLayerRenderer //! Gets access to the ID of the layer rendered by this class QString layerId() const { return mLayerID; } + /** + * Resets the painter to use for the job to a new \a painter. + * + * \since QGIS 3.10 + */ + virtual void setPainter( QPainter *painter ) { Q_UNUSED( painter ) } + protected: QStringList mErrors; QString mLayerID; diff --git a/src/core/qgsmaprendererstagedrenderjob.cpp b/src/core/qgsmaprendererstagedrenderjob.cpp index 43ba69dff28..e42806293a9 100644 --- a/src/core/qgsmaprendererstagedrenderjob.cpp +++ b/src/core/qgsmaprendererstagedrenderjob.cpp @@ -102,7 +102,7 @@ bool QgsMapRendererStagedRenderJob::renderCurrentPart( QPainter *painter ) if ( mJobIt != mLayerJobs.end() ) { LayerRenderJob &job = *mJobIt; - job.context.setPainter( painter ); + job.renderer->setPainter( painter ); if ( job.context.useAdvancedEffects() ) { diff --git a/src/core/qgsvectorlayerrenderer.cpp b/src/core/qgsvectorlayerrenderer.cpp index 079fefda563..b467497d980 100644 --- a/src/core/qgsvectorlayerrenderer.cpp +++ b/src/core/qgsvectorlayerrenderer.cpp @@ -131,6 +131,11 @@ QgsFeedback *QgsVectorLayerRenderer::feedback() const return mInterruptionChecker.get(); } +void QgsVectorLayerRenderer::setPainter( QPainter *painter ) +{ + mContext.setPainter( painter ); +} + bool QgsVectorLayerRenderer::render() { if ( mGeometryType == QgsWkbTypes::NullGeometry || mGeometryType == QgsWkbTypes::UnknownGeometry ) diff --git a/src/core/qgsvectorlayerrenderer.h b/src/core/qgsvectorlayerrenderer.h index d3d165053b4..69b0016cd21 100644 --- a/src/core/qgsvectorlayerrenderer.h +++ b/src/core/qgsvectorlayerrenderer.h @@ -77,7 +77,7 @@ class QgsVectorLayerRenderer : public QgsMapLayerRenderer QgsVectorLayerRenderer( QgsVectorLayer *layer, QgsRenderContext &context ); ~QgsVectorLayerRenderer() override; QgsFeedback *feedback() const override; - + void setPainter( QPainter *painter ) override; bool render() override; private: diff --git a/src/core/raster/qgsrasterlayerrenderer.cpp b/src/core/raster/qgsrasterlayerrenderer.cpp index b4e699449e1..6481a34c81b 100644 --- a/src/core/raster/qgsrasterlayerrenderer.cpp +++ b/src/core/raster/qgsrasterlayerrenderer.cpp @@ -238,6 +238,11 @@ QgsRasterLayerRenderer::~QgsRasterLayerRenderer() delete mPipe; } +void QgsRasterLayerRenderer::setPainter( QPainter *painter ) +{ + mPainter = painter; +} + bool QgsRasterLayerRenderer::render() { if ( !mRasterViewPort ) diff --git a/src/core/raster/qgsrasterlayerrenderer.h b/src/core/raster/qgsrasterlayerrenderer.h index 69f561bc2eb..6b359b12c68 100644 --- a/src/core/raster/qgsrasterlayerrenderer.h +++ b/src/core/raster/qgsrasterlayerrenderer.h @@ -71,8 +71,8 @@ class CORE_EXPORT QgsRasterLayerRenderer : public QgsMapLayerRenderer QgsRasterLayerRenderer( QgsRasterLayer *layer, QgsRenderContext &rendererContext ); ~QgsRasterLayerRenderer() override; + void setPainter( QPainter *painter ) override; bool render() override; - QgsFeedback *feedback() const override; private: