Skip to content

Commit

Permalink
Ensure that all units are changed when setting output unit for a symbol
Browse files Browse the repository at this point in the history
  • Loading branch information
nyalldawson committed May 31, 2022
1 parent 4ecf0ea commit a3e72bd
Show file tree
Hide file tree
Showing 20 changed files with 88 additions and 10 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,8 @@ Create a new QgsArrowSymbolLayer

virtual bool usesMapUnits() const;

virtual void setOutputUnit( QgsUnitTypes::RenderUnit unit );


double arrowWidth() const;
%Docstring
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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/ );
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;


Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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};
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -530,6 +530,8 @@ Creates a new QgsFilledMarkerSymbolLayer.

virtual bool usesMapUnits() const;

virtual void setOutputUnit( QgsUnitTypes::RenderUnit unit );


private:
QgsFilledMarkerSymbolLayer( const QgsFilledMarkerSymbolLayer & );
Expand Down Expand Up @@ -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;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,8 @@ Create a new QgsMaskMarkerSymbolLayer

virtual bool usesMapUnits() const;

virtual void setOutputUnit( QgsUnitTypes::RenderUnit unit );

virtual QColor color() const;


Expand Down
9 changes: 9 additions & 0 deletions src/core/symbology/qgsarrowsymbollayer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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() );
Expand Down
1 change: 1 addition & 0 deletions src/core/symbology/qgsarrowsymbollayer.h
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,7 @@ class CORE_EXPORT QgsArrowSymbolLayer : public QgsLineSymbolLayer
QSet<QString> 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; }
Expand Down
12 changes: 11 additions & 1 deletion src/core/symbology/qgsfillsymbollayer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1878,7 +1878,6 @@ void QgsSVGFillSymbolLayer::setMapUnitScale( const QgsMapUnitScale &scale )
QgsImageFillSymbolLayer::setMapUnitScale( scale );
mPatternWidthMapUnitScale = scale;
mSvgStrokeWidthMapUnitScale = scale;
mStrokeWidthMapUnitScale = scale;
}

QgsMapUnitScale QgsSVGFillSymbolLayer::mapUnitScale() const
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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;
Expand Down Expand Up @@ -5323,6 +5332,7 @@ void QgsRandomMarkerFillSymbolLayer::stopFeatureRender( const QgsFeature &featur

void QgsRandomMarkerFillSymbolLayer::setOutputUnit( QgsUnitTypes::RenderUnit unit )
{
mDensityAreaUnit = unit;
if ( mMarker )
{
mMarker->setOutputUnit( unit );
Expand Down
1 change: 1 addition & 0 deletions src/core/symbology/qgsfillsymbollayer.h
Original file line number Diff line number Diff line change
Expand Up @@ -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; }
Expand Down
10 changes: 10 additions & 0 deletions src/core/symbology/qgsgeometrygeneratorsymbollayer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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 )
Expand Down
1 change: 1 addition & 0 deletions src/core/symbology/qgsgeometrygeneratorsymbollayer.h
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
21 changes: 13 additions & 8 deletions src/core/symbology/qgslinesymbollayer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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 );
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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<QString> QgsHashedLineSymbolLayer::usedAttributes( const QgsRenderContext &context ) const
Expand Down
1 change: 1 addition & 0 deletions src/core/symbology/qgslinesymbollayer.h
Original file line number Diff line number Diff line change
Expand Up @@ -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<QPolygonF> *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;
Expand Down
15 changes: 14 additions & 1 deletion src/core/symbology/qgsmarkersymbollayer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}

Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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;
Expand Down
2 changes: 2 additions & 0 deletions src/core/symbology/qgsmarkersymbollayer.h
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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

Expand Down
7 changes: 7 additions & 0 deletions src/core/symbology/qgsmasksymbollayer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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();
Expand Down
1 change: 1 addition & 0 deletions src/core/symbology/qgsmasksymbollayer.h
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
1 change: 1 addition & 0 deletions src/core/symbology/qgssymbollayer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -721,6 +721,7 @@ QgsMapUnitScale QgsMarkerSymbolLayer::mapUnitScale() const
void QgsLineSymbolLayer::setOutputUnit( QgsUnitTypes::RenderUnit unit )
{
mWidthUnit = unit;
mOffsetUnit = unit;
}

QgsUnitTypes::RenderUnit QgsLineSymbolLayer::outputUnit() const
Expand Down
2 changes: 2 additions & 0 deletions src/core/symbology/qgsvectorfieldsymbollayer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down

0 comments on commit a3e72bd

Please sign in to comment.