From 131378650ff47f35588eed04162a7e2f2c728abf Mon Sep 17 00:00:00 2001 From: Nyall Dawson Date: Tue, 8 Jun 2021 16:43:25 +1000 Subject: [PATCH] Fix "force layer to render as raster" setting wasn't correctly copied with cloned renderers And move more common code to QgsFeatureRenderer::copyRendererData Fixes #43535 --- src/core/symbology/qgscategorizedsymbolrenderer.cpp | 1 - src/core/symbology/qgsembeddedsymbolrenderer.cpp | 1 - src/core/symbology/qgsgraduatedsymbolrenderer.cpp | 1 - src/core/symbology/qgsrenderer.cpp | 6 ++---- src/core/symbology/qgsrenderer.h | 8 ++++---- src/core/symbology/qgsrulebasedrenderer.cpp | 1 - src/core/symbology/qgssinglesymbolrenderer.cpp | 1 - 7 files changed, 6 insertions(+), 13 deletions(-) diff --git a/src/core/symbology/qgscategorizedsymbolrenderer.cpp b/src/core/symbology/qgscategorizedsymbolrenderer.cpp index 95db6b609c97..507de3d36686 100644 --- a/src/core/symbology/qgscategorizedsymbolrenderer.cpp +++ b/src/core/symbology/qgscategorizedsymbolrenderer.cpp @@ -506,7 +506,6 @@ QgsCategorizedSymbolRenderer *QgsCategorizedSymbolRenderer::clone() const { r->setSourceColorRamp( mSourceColorRamp->clone() ); } - r->setUsingSymbolLevels( usingSymbolLevels() ); r->setDataDefinedSizeLegend( mDataDefinedSizeLegend ? new QgsDataDefinedSizeLegend( *mDataDefinedSizeLegend ) : nullptr ); copyRendererData( r ); diff --git a/src/core/symbology/qgsembeddedsymbolrenderer.cpp b/src/core/symbology/qgsembeddedsymbolrenderer.cpp index 9e9686f559f4..ef88d5b1df13 100644 --- a/src/core/symbology/qgsembeddedsymbolrenderer.cpp +++ b/src/core/symbology/qgsembeddedsymbolrenderer.cpp @@ -92,7 +92,6 @@ bool QgsEmbeddedSymbolRenderer::usesEmbeddedSymbols() const QgsEmbeddedSymbolRenderer *QgsEmbeddedSymbolRenderer::clone() const { QgsEmbeddedSymbolRenderer *r = new QgsEmbeddedSymbolRenderer( mDefaultSymbol->clone() ); - r->setUsingSymbolLevels( usingSymbolLevels() ); copyRendererData( r ); return r; } diff --git a/src/core/symbology/qgsgraduatedsymbolrenderer.cpp b/src/core/symbology/qgsgraduatedsymbolrenderer.cpp index bb8328e04fff..a6d390c5d4f9 100644 --- a/src/core/symbology/qgsgraduatedsymbolrenderer.cpp +++ b/src/core/symbology/qgsgraduatedsymbolrenderer.cpp @@ -317,7 +317,6 @@ QgsGraduatedSymbolRenderer *QgsGraduatedSymbolRenderer::clone() const { r->setSourceColorRamp( mSourceColorRamp->clone() ); } - r->setUsingSymbolLevels( usingSymbolLevels() ); r->setDataDefinedSizeLegend( mDataDefinedSizeLegend ? new QgsDataDefinedSizeLegend( *mDataDefinedSizeLegend ) : nullptr ); r->setGraduatedMethod( graduatedMethod() ); copyRendererData( r ); diff --git a/src/core/symbology/qgsrenderer.cpp b/src/core/symbology/qgsrenderer.cpp index 70dc3b29151c..6149b78da45b 100644 --- a/src/core/symbology/qgsrenderer.cpp +++ b/src/core/symbology/qgsrenderer.cpp @@ -55,17 +55,15 @@ void QgsFeatureRenderer::copyRendererData( QgsFeatureRenderer *destRenderer ) co return; destRenderer->setPaintEffect( mPaintEffect->clone() ); + destRenderer->setForceRasterRender( mForceRaster ); + destRenderer->setUsingSymbolLevels( mUsingSymbolLevels ); destRenderer->mOrderBy = mOrderBy; destRenderer->mOrderByEnabled = mOrderByEnabled; } QgsFeatureRenderer::QgsFeatureRenderer( const QString &type ) : mType( type ) - , mUsingSymbolLevels( false ) , mCurrentVertexMarkerType( QgsVectorLayer::Cross ) - , mCurrentVertexMarkerSize( 2 ) - , mForceRaster( false ) - , mOrderByEnabled( false ) { mPaintEffect = QgsPaintEffectRegistry::defaultStack(); mPaintEffect->setEnabled( false ); diff --git a/src/core/symbology/qgsrenderer.h b/src/core/symbology/qgsrenderer.h index 7adfec50640e..776b99122dd1 100644 --- a/src/core/symbology/qgsrenderer.h +++ b/src/core/symbology/qgsrenderer.h @@ -527,16 +527,16 @@ class CORE_EXPORT QgsFeatureRenderer QString mType; - bool mUsingSymbolLevels; + bool mUsingSymbolLevels = false; //! The current type of editing marker int mCurrentVertexMarkerType; //! The current size of editing marker - double mCurrentVertexMarkerSize; + double mCurrentVertexMarkerSize = 2; QgsPaintEffect *mPaintEffect = nullptr; - bool mForceRaster; + bool mForceRaster = false; /** * \note this function is used to convert old sizeScale expressions to symbol @@ -552,7 +552,7 @@ class CORE_EXPORT QgsFeatureRenderer QgsFeatureRequest::OrderBy mOrderBy; - bool mOrderByEnabled; + bool mOrderByEnabled = false; private: #ifdef SIP_RUN diff --git a/src/core/symbology/qgsrulebasedrenderer.cpp b/src/core/symbology/qgsrulebasedrenderer.cpp index f9b6c877cee7..590afe32b722 100644 --- a/src/core/symbology/qgsrulebasedrenderer.cpp +++ b/src/core/symbology/qgsrulebasedrenderer.cpp @@ -1061,7 +1061,6 @@ QgsRuleBasedRenderer *QgsRuleBasedRenderer::clone() const QgsRuleBasedRenderer *r = new QgsRuleBasedRenderer( clonedRoot ); - r->setUsingSymbolLevels( usingSymbolLevels() ); copyRendererData( r ); return r; } diff --git a/src/core/symbology/qgssinglesymbolrenderer.cpp b/src/core/symbology/qgssinglesymbolrenderer.cpp index 1fd343a9f117..e8ce23702607 100644 --- a/src/core/symbology/qgssinglesymbolrenderer.cpp +++ b/src/core/symbology/qgssinglesymbolrenderer.cpp @@ -115,7 +115,6 @@ QString QgsSingleSymbolRenderer::dump() const QgsSingleSymbolRenderer *QgsSingleSymbolRenderer::clone() const { QgsSingleSymbolRenderer *r = new QgsSingleSymbolRenderer( mSymbol->clone() ); - r->setUsingSymbolLevels( usingSymbolLevels() ); r->setDataDefinedSizeLegend( mDataDefinedSizeLegend ? new QgsDataDefinedSizeLegend( *mDataDefinedSizeLegend ) : nullptr ); copyRendererData( r ); return r;