diff --git a/src/core/qgsmaprendererjob.cpp b/src/core/qgsmaprendererjob.cpp index f2d2248f9d72..1d3c25e62573 100644 --- a/src/core/qgsmaprendererjob.cpp +++ b/src/core/qgsmaprendererjob.cpp @@ -285,12 +285,6 @@ LayerRenderJobs QgsMapRendererJob::prepareJobs( QPainter *painter, QgsLabelingEn LayerRenderJob &job = layerJobs.last(); job.cached = false; job.img = nullptr; - job.blendMode = ml->blendMode(); - job.opacity = 1.0; - if ( QgsVectorLayer *vl = qobject_cast( ml ) ) - { - job.opacity = vl->opacity(); - } job.layer = ml; job.renderingTime = -1; @@ -304,9 +298,23 @@ LayerRenderJobs QgsMapRendererJob::prepareJobs( QPainter *painter, QgsLabelingEn if ( mFeatureFilterProvider ) job.context.setFeatureFilterProvider( mFeatureFilterProvider ); + bool hasStyleOverride = mSettings.layerStyleOverrides().contains( ml->id() ); + if ( hasStyleOverride ) + ml->styleManager()->setOverrideStyle( mSettings.layerStyleOverrides().value( ml->id() ) ); + + job.blendMode = ml->blendMode(); + job.opacity = 1.0; + if ( QgsVectorLayer *vl = qobject_cast( ml ) ) + { + job.opacity = vl->opacity(); + } + // if we can use the cache, let's do it and avoid rendering! if ( mCache && mCache->hasCacheImage( ml->id() ) ) { + if ( hasStyleOverride ) + ml->styleManager()->restoreOverrideStyle(); + job.cached = true; job.imageInitialized = true; job.img = new QImage( mCache->cacheImage( ml->id() ) ); @@ -327,6 +335,9 @@ LayerRenderJobs QgsMapRendererJob::prepareJobs( QPainter *painter, QgsLabelingEn mSettings.outputImageFormat() ); if ( mypFlattenedImage->isNull() ) { + if ( hasStyleOverride ) + ml->styleManager()->restoreOverrideStyle(); + mErrors.append( Error( ml->id(), tr( "Insufficient memory for image %1x%2" ).arg( mSettings.outputSize().width() ).arg( mSettings.outputSize().height() ) ) ); delete mypFlattenedImage; layerJobs.removeLast(); @@ -339,10 +350,6 @@ LayerRenderJobs QgsMapRendererJob::prepareJobs( QPainter *painter, QgsLabelingEn job.context.setPainter( mypPainter ); } - bool hasStyleOverride = mSettings.layerStyleOverrides().contains( ml->id() ); - if ( hasStyleOverride ) - ml->styleManager()->setOverrideStyle( mSettings.layerStyleOverrides().value( ml->id() ) ); - QTime layerTime; layerTime.start(); job.renderer = ml->createMapRenderer( job.context ); @@ -350,7 +357,6 @@ LayerRenderJobs QgsMapRendererJob::prepareJobs( QPainter *painter, QgsLabelingEn if ( hasStyleOverride ) ml->styleManager()->restoreOverrideStyle(); - } // while (li.hasPrevious()) return layerJobs;