Also add signal for when layer rendering starts

This commit is contained in:
Nyall Dawson 2021-12-31 15:23:07 +10:00
parent 79d50657c7
commit dbff1e16cc
5 changed files with 26 additions and 0 deletions

View File

@ -191,6 +191,18 @@ Rendering labels is not yet done. If the fully rendered layer including labels i
.. versionadded:: 3.0
%End
void layerRenderingStarted( const QString &layerId );
%Docstring
Emitted just before rendering starts for a particular layer.
.. note::
the :py:class:`QgsMapRendererParallelJob` subclass does not emit this signal.
.. versionadded:: 3.24
%End
void layerRendered( const QString &layerId );
%Docstring
Emitted when a layer has completed rendering.

View File

@ -295,6 +295,8 @@ void QgsMapRendererCustomPainterJob::doRender()
if ( job.context()->renderingStopped() )
break;
emit layerRenderingStarted( job.layerId );
if ( ! hasSecondPass && job.context()->useAdvancedEffects() )
{
// Set the QPainter composition mode so that this layer is rendered using

View File

@ -431,6 +431,16 @@ class CORE_EXPORT QgsMapRendererJob : public QObject SIP_ABSTRACT
*/
void renderingLayersFinished();
/**
* Emitted just before rendering starts for a particular layer.
*
* \note the QgsMapRendererParallelJob subclass does not emit this signal.
*
* \since QGIS 3.24
*/
void layerRenderingStarted( const QString &layerId );
/**
* Emitted when a layer has completed rendering.
*

View File

@ -71,6 +71,7 @@ void QgsMapRendererSequentialJob::startPrivate()
connect( mInternalJob, &QgsMapRendererJob::finished, this, &QgsMapRendererSequentialJob::internalFinished );
connect( mInternalJob, &QgsMapRendererJob::layerRendered, this, &QgsMapRendererSequentialJob::layerRendered );
connect( mInternalJob, &QgsMapRendererJob::layerRenderingStarted, this, &QgsMapRendererSequentialJob::layerRenderingStarted );
mInternalJob->start();
}

View File

@ -103,6 +103,7 @@ bool QgsMapRendererStagedRenderJob::renderCurrentPart( QPainter *painter )
if ( mJobIt != mLayerJobs.end() )
{
LayerRenderJob &job = *mJobIt;
emit layerRenderingStarted( job.layerId );
job.renderer->renderContext()->setPainter( painter );
if ( job.context()->useAdvancedEffects() )