From b27efe9865fa30f3ce859b41ac52aa393b418520 Mon Sep 17 00:00:00 2001 From: Marco Hugentobler Date: Fri, 23 Nov 2012 15:40:34 +0100 Subject: [PATCH] Also support layer transparency in server for old symbology --- src/mapserver/qgswmsserver.cpp | 30 +++++++++++++++++++++++------- src/mapserver/qgswmsserver.h | 4 ++-- 2 files changed, 25 insertions(+), 9 deletions(-) diff --git a/src/mapserver/qgswmsserver.cpp b/src/mapserver/qgswmsserver.cpp index aebed24a25f..46b7e753a55 100644 --- a/src/mapserver/qgswmsserver.cpp +++ b/src/mapserver/qgswmsserver.cpp @@ -616,7 +616,9 @@ QImage* QgsWMSServer::getMap() QHash bkVectorRenderers; QHash< QgsRasterLayer*, QgsRasterRenderer* > bkRasterRenderers; - applyOpacities( layersList, bkVectorRenderers, bkRasterRenderers ); + QHash bkVectorOld; + + applyOpacities( layersList, bkVectorRenderers, bkVectorOld, bkRasterRenderers ); mMapRenderer->render( &thePainter ); if ( mConfigParser ) @@ -625,7 +627,7 @@ QImage* QgsWMSServer::getMap() mConfigParser->drawOverlays( &thePainter, theImage->dotsPerMeterX() / 1000.0 * 25.4, theImage->width(), theImage->height() ); } - restoreOpacities( bkVectorRenderers, bkRasterRenderers ); + restoreOpacities( bkVectorRenderers, bkVectorOld, bkRasterRenderers ); restoreLayerFilters( originalLayerFilters ); clearFeatureSelections( selectedLayerIdList ); @@ -1984,7 +1986,7 @@ void QgsWMSServer::clearFeatureSelections( const QStringList& layerIds ) const return; } -void QgsWMSServer::applyOpacities( const QStringList& layerList, QHash& vectorRenderers, +void QgsWMSServer::applyOpacities( const QStringList& layerList, QHash& vectorRenderers, QHash vectorOld, QHash< QgsRasterLayer*, QgsRasterRenderer* >& rasterRenderers ) { //get opacity list @@ -2039,9 +2041,15 @@ void QgsWMSServer::applyOpacities( const QStringList& layerList, QHashsetAlpha(( *symbolIt )->alpha() * lOpIt->second / 255.0 ); + ( *symbolIt )->setAlpha(( *symbolIt )->alpha() * opacity / 255.0 ); } } + else //old symbology + { + vectorOld.insert( vl, vl->getTransparency() ); + vl->setTransparency( opacity ); + } + } else if ( ml->type() == QgsMapLayer::RasterLayer ) { @@ -2056,12 +2064,11 @@ void QgsWMSServer::applyOpacities( const QStringList& layerList, QHash& vectorRenderers, QHash < QgsRasterLayer*, - QgsRasterRenderer* > & rasterRenderers ) +void QgsWMSServer::restoreOpacities( QHash& vectorRenderers, QHash vectorOld, + QHash < QgsRasterLayer*, QgsRasterRenderer* > & rasterRenderers ) { QHash::iterator vIt = vectorRenderers.begin(); for ( ; vIt != vectorRenderers.end(); ++vIt ) @@ -2077,6 +2084,15 @@ void QgsWMSServer::restoreOpacities( QHashsetRenderer( rIt.value() ); } } + + QHash::iterator oIt = vectorOld.begin(); + for ( ; oIt != vectorOld.end(); ++oIt ) + { + if ( oIt.key() ) + { + oIt.key()->setTransparency( oIt.value() ); + } + } } bool QgsWMSServer::checkMaximumWidthHeight() const diff --git a/src/mapserver/qgswmsserver.h b/src/mapserver/qgswmsserver.h index c05f9b03af8..d5848e72b9e 100644 --- a/src/mapserver/qgswmsserver.h +++ b/src/mapserver/qgswmsserver.h @@ -167,10 +167,10 @@ class QgsWMSServer /**Clear all feature selections in the given layers*/ void clearFeatureSelections( const QStringList& layerIds ) const; - void applyOpacities( const QStringList& layerList, QHash& vectorRenderers, + void applyOpacities( const QStringList& layerList, QHash& vectorRenderers, QHash vectorOld, QHash< QgsRasterLayer*, QgsRasterRenderer* >& rasterRenderers ); - void restoreOpacities( QHash& vectorRenderers, + void restoreOpacities( QHash& vectorRenderers, QHash vectorOld, QHash< QgsRasterLayer*, QgsRasterRenderer* >& rasterRenderers ); void appendFormats( QDomDocument &doc, QDomElement &elem, const QStringList &formats );