From 2dda2abc98a96db895dbfe1b597289c5ca50e73f Mon Sep 17 00:00:00 2001 From: Marco Hugentobler Date: Tue, 17 Oct 2017 14:53:55 +0200 Subject: [PATCH] Remove temporary layers (highlight layers and external wms layers) --- src/server/services/wms/qgswmsrenderer.cpp | 15 ++++++++++++++- src/server/services/wms/qgswmsrenderer.h | 7 ++++++- 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/src/server/services/wms/qgswmsrenderer.cpp b/src/server/services/wms/qgswmsrenderer.cpp index 50151aecc31..f88e4d1e1cd 100644 --- a/src/server/services/wms/qgswmsrenderer.cpp +++ b/src/server/services/wms/qgswmsrenderer.cpp @@ -132,6 +132,11 @@ namespace QgsWms initNicknameLayers(); } + QgsRenderer::~QgsRenderer() + { + removeTemporaryLayers(); + } + QImage *QgsRenderer::getLegendGraphics() { @@ -2557,6 +2562,7 @@ namespace QgsWms } } + mTemporaryLayers.append( highlightLayers ); return highlightLayers; } @@ -2602,7 +2608,7 @@ namespace QgsWms return layers; } - QList QgsRenderer::stylizedLayers( const QList ¶ms ) const + QList QgsRenderer::stylizedLayers( const QList ¶ms ) { QList layers; @@ -2618,6 +2624,7 @@ namespace QgsWms if ( externalWMSLayer ) { layers.append( externalWMSLayer ); + mTemporaryLayers.append( externalWMSLayer ); } } else if ( mNicknameLayers.contains( nickname ) && !mRestrictedLayers.contains( nickname ) ) @@ -2672,6 +2679,12 @@ namespace QgsWms return wmsLayer; } + void QgsRenderer::removeTemporaryLayers() + { + qDeleteAll( mTemporaryLayers ); + mTemporaryLayers.clear(); + } + QPainter *QgsRenderer::layersRendering( const QgsMapSettings &mapSettings, QImage &image, HitTest *hitTest ) const { QPainter *painter = nullptr; diff --git a/src/server/services/wms/qgswmsrenderer.h b/src/server/services/wms/qgswmsrenderer.h index da414f889b4..21340d8f4de 100644 --- a/src/server/services/wms/qgswmsrenderer.h +++ b/src/server/services/wms/qgswmsrenderer.h @@ -84,6 +84,8 @@ namespace QgsWms const QgsProject *project, const QgsServerRequest::Parameters ¶meters ); + ~QgsRenderer(); + /** * Returns the map legend as an image (or a null pointer in case of error). The caller takes ownership of the image object*/ @@ -154,7 +156,7 @@ namespace QgsWms void annotationsRendering( QPainter *painter ) const; // Return a list of layers stylized with LAYERS/STYLES parameters - QList stylizedLayers( const QList ¶ms ) const; + QList stylizedLayers( const QList ¶ms ); // Return a list of layers stylized with SLD parameter QList sldStylizedLayers( const QString &sld ) const; @@ -277,6 +279,8 @@ namespace QgsWms //! Creates external WMS layer. Caller takes ownership QgsMapLayer *createExternalWMSLayer( const QString &externalLayerId ) const; + void removeTemporaryLayers(); + private: const QgsServerRequest::Parameters &mParameters; @@ -289,6 +293,7 @@ namespace QgsWms QgsWmsParameters mWmsParameters; QStringList mRestrictedLayers; QMap mNicknameLayers; + QList mTemporaryLayers; public: