40void QgsMapRendererStagedRenderJob::startPrivate()
 
   45  QgsDebugMsgLevel( QStringLiteral( 
"Preparing list of layer jobs for rendering" ), 5 );
 
   46  QElapsedTimer prepareTime;
 
   49  mLabelingEngineV2.reset();
 
   57    mLabelingEngineV2->setMapSettings( 
mSettings );
 
   60  mLayerJobs = 
prepareJobs( 
nullptr, mLabelingEngineV2.get(), 
true );
 
   63  mJobIt = mLayerJobs.begin();
 
   90  if ( mLabelingEngineV2 )
 
   91    return mLabelingEngineV2->takeResults();
 
 
  103  if ( mJobIt != mLayerJobs.end() )
 
  105    LayerRenderJob &job = *mJobIt;
 
  107    job.renderer->renderContext()->setPainter( painter );
 
  109    if ( job.context()->useAdvancedEffects() )
 
  113      painter->setCompositionMode( job.blendMode );
 
  116    if ( job.previewRenderImage && !job.previewRenderImageInitialized )
 
  118      job.previewRenderImage->fill( 0 );
 
  119      job.previewRenderImageInitialized = 
true;
 
  125      job.imageInitialized = 
true;
 
  128    job.completed = job.renderer->render();
 
  133      painter->setOpacity( job.opacity );
 
  134      painter->drawImage( 0, 0, *job.img );
 
  135      painter->setOpacity( 1.0 );
 
  137    job.context()->setPainter( 
nullptr );
 
  143    if ( !mLabelingEngineV2 )
 
  148      if ( !mPreparedStagedLabelJob || mLabelLayerIt == mLabelingLayers.end() )
 
  151      mLabelJob.context.setPainter( painter );
 
  154      painter->setCompositionMode( QPainter::CompositionMode_SourceOver );
 
  159      mLabelJob.context.setPainter( 
nullptr );
 
  163      mLabelJob.context.setPainter( painter );
 
  164      drawLabeling( mLabelJob.context, mLabelingEngineV2.get(), painter );
 
  165      mLabelJob.complete = 
true;
 
  166      mLabelJob.participatingLayers = _qgis_listRawToQPointer( mLabelingEngineV2->participatingLayers() );
 
  167      mLabelJob.context.setPainter( 
nullptr );
 
 
  178  if ( mJobIt != mLayerJobs.end() )
 
  181    if ( mJobIt != mLayerJobs.end() )
 
  185  if ( mLabelingEngineV2 )
 
  189      if ( !mPreparedStagedLabelJob )
 
  191        mLabelingEngineV2->run( mLabelJob.context );
 
  192        mPreparedStagedLabelJob = 
true;
 
  193        mLabelingLayers = mLabelingEngineV2->participatingLayerIds();
 
  194        mLabelLayerIt = mLabelingLayers.begin();
 
  195        if ( mLabelLayerIt == mLabelingLayers.end() )
 
  205        if ( mLabelLayerIt != mLabelingLayers.end() )
 
  208          if ( mLabelLayerIt != mLabelingLayers.end() )
 
  218        mExportedLabels = 
true;
 
  220      else if ( !mExportedLabels )
 
 
  237  if ( mJobIt != mLayerJobs.end() )
 
  239    const LayerRenderJob &job = *mJobIt;
 
  244    if ( mLabelLayerIt != mLabelingLayers.end() )
 
  245      return *mLabelLayerIt;
 
 
  252  if ( mJobIt != mLayerJobs.end() )
 
  254    const LayerRenderJob &job = *mJobIt;
 
 
  262  if ( mJobIt != mLayerJobs.end() )
 
  264    const LayerRenderJob &job = *mJobIt;
 
  265    return job.blendMode;
 
  267  return QPainter::CompositionMode_SourceOver;
 
 
  272  if ( mJobIt != mLayerJobs.end() )
 
  276    if ( !mPreparedStagedLabelJob )
 
  278    if ( mLabelLayerIt != mLabelingLayers.end() )
 
  281  else if ( mNextIsLabel && !mExportedLabels )
 
 
@ DrawLabeling
Enable drawing of labels on top of the map.
 
Default QgsLabelingEngine implementation, which completes the whole labeling operation (including lab...
 
Class that stores computed placement from labeling engine.
 
Abstract base class for map renderer jobs which use custom painters.
 
void preparePainter(QPainter *painter, const QColor &backgroundColor=Qt::transparent)
Prepares the given painter ready for a map render.
 
static Q_DECL_DEPRECATED void drawLabeling(const QgsMapSettings &settings, QgsRenderContext &renderContext, QgsLabelingEngine *labelingEngine2, QPainter *painter)
 
void layerRendered(const QString &layerId)
Emitted when a layer has completed rendering.
 
std::vector< LayerRenderJob > prepareJobs(QPainter *painter, QgsLabelingEngine *labelingEngine2, bool deferredPainterSet=false)
Creates a list of layer rendering jobs and prepares them for later render.
 
void cleanupJobs(std::vector< LayerRenderJob > &jobs)
 
QElapsedTimer mRenderingStart
 
void layerRenderingStarted(const QString &layerId)
Emitted just before rendering starts for a particular layer.
 
LabelRenderJob prepareLabelingJob(QPainter *painter, QgsLabelingEngine *labelingEngine2, bool canUseLabelCache=true)
Prepares a labeling job.
 
void cleanupLabelJob(LabelRenderJob &job)
Handles clean up tasks for a label job, including deletion of images and storing cached label results...
 
double currentLayerOpacity() const
Returns the opacity for the current layer about to be rendered in the next render operation.
 
void cancel() override
Stop the rendering job - does not return until the job has terminated.
 
~QgsMapRendererStagedRenderJob() override
 
@ RenderLabelsByMapLayer
Labels should be rendered in individual stages by map layer. This allows separation of labels belongi...
 
bool usedCachedLabels() const override
Returns true if the render job was able to use a cached labeling solution.
 
RenderStage currentStage() const
Returns the current stage which will be rendered in the next render operation.
 
void waitForFinished() override
Block until the job has finished.
 
QPainter::CompositionMode currentLayerCompositionMode() const
Returns the composition mode for the current layer about to be rendered in the next render operation.
 
QString currentLayerId() const
Returns the ID of the current layer about to be rendered in the next render operation.
 
QgsLabelingResults * takeLabelingResults() override
Gets pointer to internal labeling engine (in order to get access to the results).
 
bool isActive() const override
Tell whether the rendering job is currently running in background.
 
QgsMapRendererStagedRenderJob(const QgsMapSettings &settings, Flags flags=Flags())
Constructor for QgsMapRendererStagedRenderJob, using the given map settings.
 
bool isFinished() const
Returns true if the job is finished, and nothing remains to render.
 
RenderStage
Represents the stages of a rendering job.
 
@ Finished
Rendering is finished.
 
@ Symbology
Rendering layer symbology.
 
@ Labels
Rendering labels.
 
bool nextPart()
Iterates to the next part to render.
 
bool renderCurrentPart(QPainter *painter)
Renders the current part of the map to the specified painter.
 
void cancelWithoutBlocking() override
Triggers cancellation of the rendering job without blocking.
 
The QgsMapSettings class contains configuration for rendering of the map.
 
bool testFlag(Qgis::MapSettingsFlag flag) const
Check whether a particular flag is enabled.
 
A QgsLabelingEngine implementation, which only calculates the labeling solution during its run() meth...
 
#define QgsDebugMsgLevel(str, level)