16#ifndef QGSMAPRENDERERJOB_H
17#define QGSMAPRENDERERJOB_H
21#include <QFutureWatcher>
26#include <QElapsedTimer>
56 LayerRenderJob() =
default;
59 LayerRenderJob(
const LayerRenderJob & ) =
delete;
62 LayerRenderJob &operator=(
const LayerRenderJob & ) =
delete;
64 LayerRenderJob( LayerRenderJob && );
65 LayerRenderJob &operator=( LayerRenderJob && );
73 void setContext( std::unique_ptr< QgsRenderContext > context ) { mContext = std::move( context ); }
87 QImage *img =
nullptr;
99 bool imageInitialized =
false;
101 bool imageCanBeComposed()
const;
105 QPainter::CompositionMode blendMode = QPainter::CompositionMode_SourceOver;
107 double opacity = 1.0;
113 bool renderAboveLabels =
false;
123 bool completed =
false;
126 int renderingTime = -1;
137 int estimatedRenderingTime = 0;
167 std::unique_ptr<QPainter> maskPainter;
171 std::unique_ptr<QPaintDevice> maskPaintDevice;
177 bool maskRequiresLayerRasterization =
false;
183 LayerRenderJob *firstPassJob =
nullptr;
188 std::unique_ptr<QPicture> picture;
196 QList<QPair<LayerRenderJob *, int>> maskJobs;
199 std::unique_ptr< QgsRenderContext > mContext;
215 QImage *img =
nullptr;
218 std::unique_ptr<QPicture> picture;
221 std::vector< std::unique_ptr<QPainter> > maskPainters;
233 std::vector< std::unique_ptr<QPaintDevice> > maskPaintDevices;
244 bool canUseCache =
false;
246 bool complete =
false;
248 int renderingTime = -1;
250 QList< QPointer< QgsMapLayer > > participatingLayers;
370 Error(
const QString &lid,
const QString &msg )
379 typedef QList<QgsMapRendererJob::Error>
Errors;
421 int renderingTime()
const {
return mRenderingTime; }
442 void setLayerRenderingTimeHints( const QHash< QString,
int > &hints )
SIP_SKIP;
462 static const QString LABEL_PREVIEW_CACHE_ID
SIP_SKIP;
469 static const QString ELEVATION_MAP_CACHE_PREFIX
SIP_SKIP;
517 int mRenderingTime = 0;
532 bool mRecordRenderingTime =
true;
558 std::vector< LayerRenderJob > prepareJobs( QPainter *painter,
QgsLabelingEngine *labelingEngine2,
bool deferredPainterSet = false )
SIP_SKIP;
575 std::vector< LayerRenderJob > prepareSecondPassJobs( std::vector< LayerRenderJob > &firstPassJobs, LabelRenderJob &labelJob )
SIP_SKIP;
581 void initSecondPassJobs( std::vector< LayerRenderJob > &secondPassJobs, LabelRenderJob &labelJob ) const
SIP_SKIP;
585 const std::vector< LayerRenderJob > &jobs,
586 const LabelRenderJob &labelJob,
601 static
void composeSecondPass( std::vector< LayerRenderJob > &secondPassJobs, LabelRenderJob &labelJob,
bool forceVector = false )
SIP_SKIP;
604 void logRenderingTime( const std::vector< LayerRenderJob > &jobs, const std::vector< LayerRenderJob > &secondPassJobs, const LabelRenderJob &labelJob )
SIP_SKIP;
607 void cleanupJobs( std::vector< LayerRenderJob > &jobs )
SIP_SKIP;
610 void cleanupSecondPassJobs( std::vector< LayerRenderJob > &jobs )
SIP_SKIP;
618 void cleanupLabelJob( LabelRenderJob &job )
SIP_SKIP;
647 QImage *allocateImage( QString layerId );
653 QPainter *allocateImageAndPainter( QString layerId, QImage *&image, const
QgsRenderContext *context );
660 virtual
void startPrivate() = 0;
665 typedef std::pair<std::
unique_ptr<QPicture>, QPainter * > PictureAndPainter;
668 PictureAndPainter allocatePictureAndPainter( const
QgsRenderContext *context );
Stores digital elevation model in a raster image which may get updated as a part of map layer renderi...
Abstract interface for use by classes that filter the features or attributes of a layer.
Abstract base class that can be used to intercept rendered labels from a labeling / rendering job.
QgsFeedback subclass for granular reporting of labeling engine progress.
The QgsLabelingEngine class provides map labeling functionality.
Class that stores computed placement from labeling engine.
Base class for utility classes that encapsulate information necessary for rendering of map layers.
Base class for all map layer types.
This class is responsible for keeping cache of rendered images resulting from a map rendering job.
Abstract base class for map rendering implementations.
virtual void waitForFinished()=0
Block until the job has finished.
void setCache(QgsMapRendererCache *cache)
Assign a cache to be used for reading and storing rendered images of individual layers.
QHash< QgsMapLayer *, int > perLayerRenderingTime() const
Returns the render time (in ms) per layer.
virtual bool usedCachedLabels() const =0
Returns true if the render job was able to use a cached labeling solution.
void setLabelSink(QgsLabelSink *sink)
Assigns the label sink which will take over responsibility for handling labels during the rendering j...
QHash< QString, int > mLayerRenderingTimeHints
Approximate expected layer rendering time per layer, by layer ID.
std::unique_ptr< QgsRenderedItemResults > mRenderedItemResults
Errors errors() const
List of errors that happened during the rendering job - available when the rendering has been finishe...
void layerRendered(const QString &layerId)
Emitted when a layer has completed rendering.
void renderingLayersFinished()
Emitted when the layers are rendered.
QElapsedTimer mRenderingStart
void finished()
emitted when asynchronous rendering is finished (or canceled).
const QgsFeatureFilterProvider * featureFilterProvider() const
Returns the feature filter provider used by the QgsRenderContext of each LayerRenderJob.
static const QgsSettingsEntryBool * settingsLogCanvasRefreshEvent
Settings entry log canvas refresh event.
QgsMapRendererJob(const QgsMapSettings &settings)
~QgsMapRendererJob() override
void start()
Start the rendering job and immediately return.
void layerRenderingStarted(const QString &layerId)
Emitted just before rendering starts for a particular layer.
QStringList mLayersRedrawnFromCache
QStringList layersRedrawnFromCache() const
Returns a list of the layer IDs for all layers which were redrawn from cached images.
QList< QgsMapRendererJob::Error > Errors
QHash< QgsWeakMapLayerPointer, int > mPerLayerRenderingTime
Render time (in ms) per layer, by layer ID.
QgsRenderedItemResults * takeRenderedItemResults()
Takes the rendered item results from the map render job and returns them.
virtual bool isActive() const =0
Tell whether the rendering job is currently running in background.
QgsLabelingEngineFeedback * labelingEngineFeedback()
Returns the associated labeling engine feedback object.
virtual QgsLabelingResults * takeLabelingResults()=0
Gets pointer to internal labeling engine (in order to get access to the results).
virtual void cancel()=0
Stop the rendering job - does not return until the job has terminated.
virtual void cancelWithoutBlocking()=0
Triggers cancellation of the rendering job without blocking.
QgsLabelSink * labelSink() const
Returns the label sink associated to this rendering job.
bool prepareLabelCache() const
Prepares the cache for storing the result of labeling.
Intermediate base class adding functionality that allows client to query the rendered image.
QgsMapRendererQImageJob(const QgsMapSettings &settings)
virtual QImage renderedImage()=0
Gets a preview/resulting image.
The QgsMapSettings class contains configuration for rendering of the map.
This class allows the creation of mask ids based on the different label layers and to give a mask id ...
A rectangle specified with double values.
Contains information about the context of a rendering operation.
Stores collated details of rendered items during a map rendering operation.
A boolean settings entry.
std::unique_ptr< GEOSGeometry, GeosDeleter > unique_ptr
Scoped GEOS pointer.
QPointer< QgsMapLayer > QgsWeakMapLayerPointer
Weak pointer for QgsMapLayer.
Error(const QString &lid, const QString &msg)