diff --git a/python/core/auto_generated/symbology/qgsarrowsymbollayer.sip.in b/python/core/auto_generated/symbology/qgsarrowsymbollayer.sip.in index d1072a59b694..ffd4f68f6bd8 100644 --- a/python/core/auto_generated/symbology/qgsarrowsymbollayer.sip.in +++ b/python/core/auto_generated/symbology/qgsarrowsymbollayer.sip.in @@ -50,6 +50,8 @@ Create a new QgsArrowSymbolLayer virtual bool usesMapUnits() const; + virtual void setOutputUnit( QgsUnitTypes::RenderUnit unit ); + double arrowWidth() const; %Docstring diff --git a/python/core/auto_generated/symbology/qgsfillsymbollayer.sip.in b/python/core/auto_generated/symbology/qgsfillsymbollayer.sip.in index de7b742eac0d..581922a25228 100644 --- a/python/core/auto_generated/symbology/qgsfillsymbollayer.sip.in +++ b/python/core/auto_generated/symbology/qgsfillsymbollayer.sip.in @@ -967,6 +967,8 @@ Used internally when reading/writing symbols. virtual QColor color() const; + virtual void setOutputUnit( QgsUnitTypes::RenderUnit unit ); + virtual QgsSymbol *subSymbol(); virtual bool setSubSymbol( QgsSymbol *symbol /Transfer/ ); diff --git a/python/core/auto_generated/symbology/qgsgeometrygeneratorsymbollayer.sip.in b/python/core/auto_generated/symbology/qgsgeometrygeneratorsymbollayer.sip.in index 3f09d9a10956..9fb9aa47a329 100644 --- a/python/core/auto_generated/symbology/qgsgeometrygeneratorsymbollayer.sip.in +++ b/python/core/auto_generated/symbology/qgsgeometrygeneratorsymbollayer.sip.in @@ -56,6 +56,8 @@ that is created by this generator. virtual QgsUnitTypes::RenderUnit outputUnit() const; + virtual void setOutputUnit( QgsUnitTypes::RenderUnit unit ); + virtual QgsMapUnitScale mapUnitScale() const; diff --git a/python/core/auto_generated/symbology/qgslinesymbollayer.sip.in b/python/core/auto_generated/symbology/qgslinesymbollayer.sip.in index 24845b33b75e..bb335c538c7f 100644 --- a/python/core/auto_generated/symbology/qgslinesymbollayer.sip.in +++ b/python/core/auto_generated/symbology/qgslinesymbollayer.sip.in @@ -899,6 +899,8 @@ calculating individual symbol angles. virtual QgsUnitTypes::RenderUnit outputUnit() const ${SIP_FINAL}; + virtual void setOutputUnit( QgsUnitTypes::RenderUnit unit ); + virtual void setMapUnitScale( const QgsMapUnitScale &scale ) ${SIP_FINAL}; virtual QgsMapUnitScale mapUnitScale() const ${SIP_FINAL}; diff --git a/python/core/auto_generated/symbology/qgsmarkersymbollayer.sip.in b/python/core/auto_generated/symbology/qgsmarkersymbollayer.sip.in index 60f10704aebf..505a1f0cb55b 100644 --- a/python/core/auto_generated/symbology/qgsmarkersymbollayer.sip.in +++ b/python/core/auto_generated/symbology/qgsmarkersymbollayer.sip.in @@ -530,6 +530,8 @@ Creates a new QgsFilledMarkerSymbolLayer. virtual bool usesMapUnits() const; + virtual void setOutputUnit( QgsUnitTypes::RenderUnit unit ); + private: QgsFilledMarkerSymbolLayer( const QgsFilledMarkerSymbolLayer & ); @@ -987,6 +989,8 @@ required fonts are not available on the system. virtual bool usesMapUnits() const; + virtual void setOutputUnit( QgsUnitTypes::RenderUnit unit ); + QString fontFamily() const; diff --git a/python/core/auto_generated/symbology/qgsmasksymbollayer.sip.in b/python/core/auto_generated/symbology/qgsmasksymbollayer.sip.in index 0e90ece6dfaa..8f1311ac0a41 100644 --- a/python/core/auto_generated/symbology/qgsmasksymbollayer.sip.in +++ b/python/core/auto_generated/symbology/qgsmasksymbollayer.sip.in @@ -64,6 +64,8 @@ Create a new QgsMaskMarkerSymbolLayer virtual bool usesMapUnits() const; + virtual void setOutputUnit( QgsUnitTypes::RenderUnit unit ); + virtual QColor color() const; diff --git a/src/core/symbology/qgsarrowsymbollayer.cpp b/src/core/symbology/qgsarrowsymbollayer.cpp index fbcd811e1ab1..45f5bd3500c7 100644 --- a/src/core/symbology/qgsarrowsymbollayer.cpp +++ b/src/core/symbology/qgsarrowsymbollayer.cpp @@ -193,6 +193,15 @@ bool QgsArrowSymbolLayer::usesMapUnits() const || mOffsetUnit == QgsUnitTypes::RenderMapUnits || mOffsetUnit == QgsUnitTypes::RenderMetersInMapUnits; } +void QgsArrowSymbolLayer::setOutputUnit( QgsUnitTypes::RenderUnit unit ) +{ + QgsLineSymbolLayer::setOutputUnit( unit ); + mArrowWidthUnit = unit; + mArrowStartWidthUnit = unit; + mHeadLengthUnit = unit; + mHeadThicknessUnit = unit; +} + void QgsArrowSymbolLayer::startRender( QgsSymbolRenderContext &context ) { mExpressionScope.reset( new QgsExpressionContextScope() ); diff --git a/src/core/symbology/qgsarrowsymbollayer.h b/src/core/symbology/qgsarrowsymbollayer.h index 6f52792c6b07..2d564f02b5c7 100644 --- a/src/core/symbology/qgsarrowsymbollayer.h +++ b/src/core/symbology/qgsarrowsymbollayer.h @@ -52,6 +52,7 @@ class CORE_EXPORT QgsArrowSymbolLayer : public QgsLineSymbolLayer QSet usedAttributes( const QgsRenderContext &context ) const override; bool hasDataDefinedProperties() const override; bool usesMapUnits() const override; + void setOutputUnit( QgsUnitTypes::RenderUnit unit ) override; //! Gets current arrow width double arrowWidth() const { return mArrowWidth; } diff --git a/src/core/symbology/qgsfillsymbollayer.cpp b/src/core/symbology/qgsfillsymbollayer.cpp index 8f51164b41a0..7b890be8169c 100644 --- a/src/core/symbology/qgsfillsymbollayer.cpp +++ b/src/core/symbology/qgsfillsymbollayer.cpp @@ -1878,7 +1878,6 @@ void QgsSVGFillSymbolLayer::setMapUnitScale( const QgsMapUnitScale &scale ) QgsImageFillSymbolLayer::setMapUnitScale( scale ); mPatternWidthMapUnitScale = scale; mSvgStrokeWidthMapUnitScale = scale; - mStrokeWidthMapUnitScale = scale; } QgsMapUnitScale QgsSVGFillSymbolLayer::mapUnitScale() const @@ -2576,6 +2575,9 @@ void QgsLinePatternFillSymbolLayer::setOutputUnit( QgsUnitTypes::RenderUnit unit mDistanceUnit = unit; mLineWidthUnit = unit; mOffsetUnit = unit; + + if ( mFillLineSymbol ) + mFillLineSymbol->setOutputUnit( unit ); } QgsUnitTypes::RenderUnit QgsLinePatternFillSymbolLayer::outputUnit() const @@ -4864,6 +4866,13 @@ QColor QgsRasterFillSymbolLayer::color() const return QColor(); } +void QgsRasterFillSymbolLayer::setOutputUnit( QgsUnitTypes::RenderUnit unit ) +{ + QgsImageFillSymbolLayer::setOutputUnit( unit ); + mOffsetUnit = unit; + mWidthUnit = unit; +} + void QgsRasterFillSymbolLayer::setImageFilePath( const QString &imagePath ) { mImageFilePath = imagePath; @@ -5323,6 +5332,7 @@ void QgsRandomMarkerFillSymbolLayer::stopFeatureRender( const QgsFeature &featur void QgsRandomMarkerFillSymbolLayer::setOutputUnit( QgsUnitTypes::RenderUnit unit ) { + mDensityAreaUnit = unit; if ( mMarker ) { mMarker->setOutputUnit( unit ); diff --git a/src/core/symbology/qgsfillsymbollayer.h b/src/core/symbology/qgsfillsymbollayer.h index d30c7bbbe10c..95da3c285847 100644 --- a/src/core/symbology/qgsfillsymbollayer.h +++ b/src/core/symbology/qgsfillsymbollayer.h @@ -910,6 +910,7 @@ class CORE_EXPORT QgsRasterFillSymbolLayer: public QgsImageFillSymbolLayer double estimateMaxBleed( const QgsRenderContext &context ) const override; bool usesMapUnits() const override; QColor color() const override; + void setOutputUnit( QgsUnitTypes::RenderUnit unit ) override; //override QgsImageFillSymbolLayer's support for sub symbols QgsSymbol *subSymbol() override { return nullptr; } diff --git a/src/core/symbology/qgsgeometrygeneratorsymbollayer.cpp b/src/core/symbology/qgsgeometrygeneratorsymbollayer.cpp index d6107e3625a7..ad3ea2d6b70d 100644 --- a/src/core/symbology/qgsgeometrygeneratorsymbollayer.cpp +++ b/src/core/symbology/qgsgeometrygeneratorsymbollayer.cpp @@ -153,6 +153,16 @@ QgsUnitTypes::RenderUnit QgsGeometryGeneratorSymbolLayer::outputUnit() const return QgsUnitTypes::RenderUnknownUnit; } +void QgsGeometryGeneratorSymbolLayer::setOutputUnit( QgsUnitTypes::RenderUnit unit ) +{ + if ( mFillSymbol ) + mFillSymbol->setOutputUnit( unit ); + else if ( mLineSymbol ) + mLineSymbol->setOutputUnit( unit ); + else if ( mMarkerSymbol ) + mMarkerSymbol->setOutputUnit( unit ); +} + QgsMapUnitScale QgsGeometryGeneratorSymbolLayer::mapUnitScale() const { if ( mFillSymbol ) diff --git a/src/core/symbology/qgsgeometrygeneratorsymbollayer.h b/src/core/symbology/qgsgeometrygeneratorsymbollayer.h index c974319592d3..242dc3466adf 100644 --- a/src/core/symbology/qgsgeometrygeneratorsymbollayer.h +++ b/src/core/symbology/qgsgeometrygeneratorsymbollayer.h @@ -61,6 +61,7 @@ class CORE_EXPORT QgsGeometryGeneratorSymbolLayer : public QgsSymbolLayer bool usesMapUnits() const override; QColor color() const override; QgsUnitTypes::RenderUnit outputUnit() const override; + void setOutputUnit( QgsUnitTypes::RenderUnit unit ) override; QgsMapUnitScale mapUnitScale() const override; QgsSymbolLayer *clone() const override SIP_FACTORY; diff --git a/src/core/symbology/qgslinesymbollayer.cpp b/src/core/symbology/qgslinesymbollayer.cpp index 90a2767e7996..4bc1b6e4249f 100644 --- a/src/core/symbology/qgslinesymbollayer.cpp +++ b/src/core/symbology/qgslinesymbollayer.cpp @@ -57,6 +57,9 @@ void QgsSimpleLineSymbolLayer::setOutputUnit( QgsUnitTypes::RenderUnit unit ) mWidthUnit = unit; mOffsetUnit = unit; mCustomDashPatternUnit = unit; + mDashPatternOffsetUnit = unit; + mTrimDistanceStartUnit = unit; + mTrimDistanceEndUnit = unit; } QgsUnitTypes::RenderUnit QgsSimpleLineSymbolLayer::outputUnit() const @@ -1462,6 +1465,14 @@ QgsUnitTypes::RenderUnit QgsTemplatedLineSymbolLayerBase::outputUnit() const return unit; } +void QgsTemplatedLineSymbolLayerBase::setOutputUnit( QgsUnitTypes::RenderUnit unit ) +{ + QgsLineSymbolLayer::setOutputUnit( unit ); + mIntervalUnit = unit; + mOffsetAlongLineUnit = unit; + mAverageAngleLengthUnit = unit; +} + void QgsTemplatedLineSymbolLayerBase::setMapUnitScale( const QgsMapUnitScale &scale ) { QgsLineSymbolLayer::setMapUnitScale( scale ); @@ -2677,11 +2688,8 @@ double QgsMarkerLineSymbolLayer::width( const QgsRenderContext &context ) const void QgsMarkerLineSymbolLayer::setOutputUnit( QgsUnitTypes::RenderUnit unit ) { - QgsLineSymbolLayer::setOutputUnit( unit ); + QgsTemplatedLineSymbolLayerBase::setOutputUnit( unit ); mMarker->setOutputUnit( unit ); - setIntervalUnit( unit ); - mOffsetUnit = unit; - setOffsetAlongLineUnit( unit ); } bool QgsMarkerLineSymbolLayer::usesMapUnits() const @@ -2856,11 +2864,8 @@ double QgsHashedLineSymbolLayer::estimateMaxBleed( const QgsRenderContext &conte void QgsHashedLineSymbolLayer::setOutputUnit( QgsUnitTypes::RenderUnit unit ) { - QgsLineSymbolLayer::setOutputUnit( unit ); + QgsTemplatedLineSymbolLayerBase::setOutputUnit( unit ); mHashSymbol->setOutputUnit( unit ); - setIntervalUnit( unit ); - mOffsetUnit = unit; - setOffsetAlongLineUnit( unit ); } QSet QgsHashedLineSymbolLayer::usedAttributes( const QgsRenderContext &context ) const diff --git a/src/core/symbology/qgslinesymbollayer.h b/src/core/symbology/qgslinesymbollayer.h index a6a62b610b52..00f10795a2b8 100644 --- a/src/core/symbology/qgslinesymbollayer.h +++ b/src/core/symbology/qgslinesymbollayer.h @@ -803,6 +803,7 @@ class CORE_EXPORT QgsTemplatedLineSymbolLayerBase : public QgsLineSymbolLayer void renderPolyline( const QPolygonF &points, QgsSymbolRenderContext &context ) override; void renderPolygonStroke( const QPolygonF &points, const QVector *rings, QgsSymbolRenderContext &context ) FINAL; QgsUnitTypes::RenderUnit outputUnit() const FINAL; + void setOutputUnit( QgsUnitTypes::RenderUnit unit ) override; void setMapUnitScale( const QgsMapUnitScale &scale ) FINAL; QgsMapUnitScale mapUnitScale() const FINAL; QVariantMap properties() const override; diff --git a/src/core/symbology/qgsmarkersymbollayer.cpp b/src/core/symbology/qgsmarkersymbollayer.cpp index 030d308e8ad7..34018540565f 100644 --- a/src/core/symbology/qgsmarkersymbollayer.cpp +++ b/src/core/symbology/qgsmarkersymbollayer.cpp @@ -1615,7 +1615,7 @@ bool QgsSimpleMarkerSymbolLayer::writeDxf( QgsDxfExport &e, double mmMapUnitScal void QgsSimpleMarkerSymbolLayer::setOutputUnit( QgsUnitTypes::RenderUnit unit ) { - QgsMarkerSymbolLayer::setOutputUnit( unit ); + QgsSimpleMarkerSymbolLayerBase::setOutputUnit( unit ); mStrokeWidthUnit = unit; } @@ -1889,6 +1889,13 @@ bool QgsFilledMarkerSymbolLayer::usesMapUnits() const || ( mFill && mFill->usesMapUnits() ); } +void QgsFilledMarkerSymbolLayer::setOutputUnit( QgsUnitTypes::RenderUnit unit ) +{ + QgsSimpleMarkerSymbolLayerBase::setOutputUnit( unit ); + if ( mFill ) + mFill->setOutputUnit( unit ); +} + void QgsFilledMarkerSymbolLayer::draw( QgsSymbolRenderContext &context, Qgis::MarkerShape shape, const QPolygonF &polygon, const QPainterPath &path ) { //making changes here? Don't forget to also update ::bounds if the changes affect the bounding box @@ -3625,6 +3632,12 @@ bool QgsFontMarkerSymbolLayer::usesMapUnits() const || mOffsetUnit == QgsUnitTypes::RenderMapUnits || mOffsetUnit == QgsUnitTypes::RenderMetersInMapUnits; } +void QgsFontMarkerSymbolLayer::setOutputUnit( QgsUnitTypes::RenderUnit unit ) +{ + QgsMarkerSymbolLayer::setOutputUnit( unit ); + mStrokeWidthUnit = unit; +} + QRectF QgsFontMarkerSymbolLayer::bounds( QPointF point, QgsSymbolRenderContext &context ) { QPointF chrOffset = mChrOffset; diff --git a/src/core/symbology/qgsmarkersymbollayer.h b/src/core/symbology/qgsmarkersymbollayer.h index 4f3b7362f8df..34df4167bda7 100644 --- a/src/core/symbology/qgsmarkersymbollayer.h +++ b/src/core/symbology/qgsmarkersymbollayer.h @@ -470,6 +470,7 @@ class CORE_EXPORT QgsFilledMarkerSymbolLayer : public QgsSimpleMarkerSymbolLayer void setColor( const QColor &c ) override; QColor color() const override; bool usesMapUnits() const override; + void setOutputUnit( QgsUnitTypes::RenderUnit unit ) override; private: #ifdef SIP_RUN @@ -905,6 +906,7 @@ class CORE_EXPORT QgsFontMarkerSymbolLayer : public QgsMarkerSymbolLayer void writeSldMarker( QDomDocument &doc, QDomElement &element, const QVariantMap &props ) const override; bool usesMapUnits() const override; + void setOutputUnit( QgsUnitTypes::RenderUnit unit ) override; // new methods diff --git a/src/core/symbology/qgsmasksymbollayer.cpp b/src/core/symbology/qgsmasksymbollayer.cpp index 1671299523b3..a89a73685a74 100644 --- a/src/core/symbology/qgsmasksymbollayer.cpp +++ b/src/core/symbology/qgsmasksymbollayer.cpp @@ -152,6 +152,13 @@ bool QgsMaskMarkerSymbolLayer::usesMapUnits() const || ( mSymbol && mSymbol->usesMapUnits() ); } +void QgsMaskMarkerSymbolLayer::setOutputUnit( QgsUnitTypes::RenderUnit unit ) +{ + QgsMarkerSymbolLayer::setOutputUnit( unit ); + if ( mSymbol ) + mSymbol->setOutputUnit( unit ); +} + QColor QgsMaskMarkerSymbolLayer::color() const { return QColor(); diff --git a/src/core/symbology/qgsmasksymbollayer.h b/src/core/symbology/qgsmasksymbollayer.h index b5575cb3bffe..a1545ab90910 100644 --- a/src/core/symbology/qgsmasksymbollayer.h +++ b/src/core/symbology/qgsmasksymbollayer.h @@ -62,6 +62,7 @@ class CORE_EXPORT QgsMaskMarkerSymbolLayer : public QgsMarkerSymbolLayer void renderPoint( QPointF point, QgsSymbolRenderContext &context ) override; QRectF bounds( QPointF point, QgsSymbolRenderContext &context ) override; bool usesMapUnits() const override; + void setOutputUnit( QgsUnitTypes::RenderUnit unit ) override; QColor color() const override; virtual void drawPreviewIcon( QgsSymbolRenderContext &context, QSize size ) override; diff --git a/src/core/symbology/qgssymbollayer.cpp b/src/core/symbology/qgssymbollayer.cpp index 9430f3919915..49ee9c039eb1 100644 --- a/src/core/symbology/qgssymbollayer.cpp +++ b/src/core/symbology/qgssymbollayer.cpp @@ -721,6 +721,7 @@ QgsMapUnitScale QgsMarkerSymbolLayer::mapUnitScale() const void QgsLineSymbolLayer::setOutputUnit( QgsUnitTypes::RenderUnit unit ) { mWidthUnit = unit; + mOffsetUnit = unit; } QgsUnitTypes::RenderUnit QgsLineSymbolLayer::outputUnit() const diff --git a/src/core/symbology/qgsvectorfieldsymbollayer.cpp b/src/core/symbology/qgsvectorfieldsymbollayer.cpp index 91a531c6213d..a369ff79ebbe 100644 --- a/src/core/symbology/qgsvectorfieldsymbollayer.cpp +++ b/src/core/symbology/qgsvectorfieldsymbollayer.cpp @@ -32,6 +32,8 @@ void QgsVectorFieldSymbolLayer::setOutputUnit( QgsUnitTypes::RenderUnit unit ) { QgsMarkerSymbolLayer::setOutputUnit( unit ); mDistanceUnit = unit; + if ( mLineSymbol ) + mLineSymbol->setOutputUnit( unit ); } QgsUnitTypes::RenderUnit QgsVectorFieldSymbolLayer::outputUnit() const