Skip to content

Commit 4612521

Browse files
committed
Const correctnes for QgsFeature in labeling
A feature is not modified while it's sent through the labeling pipeline.
1 parent 62e09d9 commit 4612521

9 files changed

+20
-22
lines changed

python/core/auto_generated/qgspallabeling.sip.in

+3-4
Original file line numberDiff line numberDiff line change
@@ -386,9 +386,9 @@ Returns the QgsExpression for this label settings. May be None if isExpression i
386386

387387
double zIndex;
388388

389-
void calculateLabelSize( const QFontMetricsF *fm, QString text, double &labelX, double &labelY, QgsFeature *f = 0, QgsRenderContext *context = 0 );
389+
void calculateLabelSize( const QFontMetricsF *fm, QString text, double &labelX, double &labelY, const QgsFeature *f = 0, QgsRenderContext *context = 0 );
390390

391-
void registerFeature( QgsFeature &f, QgsRenderContext &context );
391+
void registerFeature( const QgsFeature &f, QgsRenderContext &context );
392392

393393
%Docstring
394394
Register a feature for labeling.
@@ -457,7 +457,7 @@ Sets the label text formatting settings, e.g., font settings, buffer settings, e
457457
.. versionadded:: 3.0
458458
%End
459459

460-
QgsFeature *mCurFeat;
460+
const QgsFeature *mCurFeat;
461461
QgsFields mCurFields;
462462
int fieldIndex;
463463
const QgsMapToPixel *xform;
@@ -469,7 +469,6 @@ Sets the label text formatting settings, e.g., font settings, buffer settings, e
469469
int mFeaturesToLabel;
470470
int mFeatsSendingToPal;
471471
int mFeatsRegPal;
472-
473472
};
474473

475474
class QgsLabelCandidate

src/core/dxf/qgsdxfpallabeling.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ void QgsDxfLabelProvider::drawLabel( QgsRenderContext &context, pal::LabelPositi
3434
mDxfExport->drawLabel( layerId(), context, label, mSettings );
3535
}
3636

37-
void QgsDxfLabelProvider::registerDxfFeature( QgsFeature &feature, QgsRenderContext &context, const QString &dxfLayerName )
37+
void QgsDxfLabelProvider::registerDxfFeature( const QgsFeature &feature, QgsRenderContext &context, const QString &dxfLayerName )
3838
{
3939
registerFeature( feature, context );
4040
mDxfExport->registerDxfLayer( layerId(), feature.id(), dxfLayerName );

src/core/dxf/qgsdxfpallabeling.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ class QgsDxfLabelProvider : public QgsVectorLayerLabelProvider
5454
* \param context render context
5555
* \param dxfLayerName name of dxf layer
5656
*/
57-
void registerDxfFeature( QgsFeature &feature, QgsRenderContext &context, const QString &dxfLayerName );
57+
void registerDxfFeature( const QgsFeature &feature, QgsRenderContext &context, const QString &dxfLayerName );
5858

5959
protected:
6060
//! pointer to parent DXF export where this instance is used

src/core/qgspallabeling.cpp

+3-3
Original file line numberDiff line numberDiff line change
@@ -1038,7 +1038,7 @@ bool QgsPalLayerSettings::checkMinimumSizeMM( const QgsRenderContext &ct, const
10381038
return QgsPalLabeling::checkMinimumSizeMM( ct, geom, minSize );
10391039
}
10401040

1041-
void QgsPalLayerSettings::calculateLabelSize( const QFontMetricsF *fm, QString text, double &labelX, double &labelY, QgsFeature *f, QgsRenderContext *context )
1041+
void QgsPalLayerSettings::calculateLabelSize( const QFontMetricsF *fm, QString text, double &labelX, double &labelY, const QgsFeature *f, QgsRenderContext *context )
10421042
{
10431043
if ( !fm || !f )
10441044
{
@@ -1186,7 +1186,7 @@ void QgsPalLayerSettings::calculateLabelSize( const QFontMetricsF *fm, QString t
11861186
#endif
11871187
}
11881188

1189-
void QgsPalLayerSettings::registerFeature( QgsFeature &f, QgsRenderContext &context, QgsLabelFeature **labelFeature, QgsGeometry obstacleGeometry )
1189+
void QgsPalLayerSettings::registerFeature( const QgsFeature &f, QgsRenderContext &context, QgsLabelFeature **labelFeature, QgsGeometry obstacleGeometry )
11901190
{
11911191
// either used in QgsPalLabeling (palLayer is set) or in QgsLabelingEngine (labelFeature is set)
11921192
Q_ASSERT( labelFeature );
@@ -1995,7 +1995,7 @@ void QgsPalLayerSettings::registerFeature( QgsFeature &f, QgsRenderContext &cont
19951995
lf->setDataDefinedValues( dataDefinedValues );
19961996
}
19971997

1998-
void QgsPalLayerSettings::registerObstacleFeature( QgsFeature &f, QgsRenderContext &context, QgsLabelFeature **obstacleFeature, const QgsGeometry &obstacleGeometry )
1998+
void QgsPalLayerSettings::registerObstacleFeature( const QgsFeature &f, QgsRenderContext &context, QgsLabelFeature **obstacleFeature, const QgsGeometry &obstacleGeometry )
19991999
{
20002000
mCurFeat = &f;
20012001

src/core/qgspallabeling.h

+4-5
Original file line numberDiff line numberDiff line change
@@ -751,7 +751,7 @@ class CORE_EXPORT QgsPalLayerSettings
751751
double zIndex;
752752

753753
// called from register feature hook
754-
void calculateLabelSize( const QFontMetricsF *fm, QString text, double &labelX, double &labelY, QgsFeature *f = nullptr, QgsRenderContext *context = nullptr );
754+
void calculateLabelSize( const QFontMetricsF *fm, QString text, double &labelX, double &labelY, const QgsFeature *f = nullptr, QgsRenderContext *context = nullptr );
755755

756756
/**
757757
* Register a feature for labeling.
@@ -766,7 +766,7 @@ class CORE_EXPORT QgsPalLayerSettings
766766
* the feature's original geometry will be used as an obstacle for labels. Not available
767767
* in Python bindings.
768768
*/
769-
void registerFeature( QgsFeature &f, QgsRenderContext &context,
769+
void registerFeature( const QgsFeature &f, QgsRenderContext &context,
770770
QgsLabelFeature **labelFeature SIP_PYARGREMOVE = nullptr,
771771
QgsGeometry obstacleGeometry SIP_PYARGREMOVE = QgsGeometry() );
772772

@@ -823,7 +823,7 @@ class CORE_EXPORT QgsPalLayerSettings
823823
void setFormat( const QgsTextFormat &format ) { mFormat = format; }
824824

825825
// temporary stuff: set when layer gets prepared or labeled
826-
QgsFeature *mCurFeat = nullptr;
826+
const QgsFeature *mCurFeat = nullptr;
827827
QgsFields mCurFields;
828828
int fieldIndex;
829829
const QgsMapToPixel *xform = nullptr;
@@ -835,7 +835,6 @@ class CORE_EXPORT QgsPalLayerSettings
835835
int mFeaturesToLabel = 0; // total features that will probably be labeled, may be less (figured before PAL)
836836
int mFeatsSendingToPal = 0; // total features tested for sending into PAL (relative to maxNumLabels)
837837
int mFeatsRegPal = 0; // number of features registered in PAL, when using limitNumLabels
838-
839838
private:
840839

841840
friend class QgsVectorLayer; // to allow calling readFromLayerCustomProperties()
@@ -899,7 +898,7 @@ class CORE_EXPORT QgsPalLayerSettings
899898
/**
900899
* Registers a feature as an obstacle only (no label rendered)
901900
*/
902-
void registerObstacleFeature( QgsFeature &f, QgsRenderContext &context, QgsLabelFeature **obstacleFeature, const QgsGeometry &obstacleGeometry = QgsGeometry() );
901+
void registerObstacleFeature( const QgsFeature &f, QgsRenderContext &context, QgsLabelFeature **obstacleFeature, const QgsGeometry &obstacleGeometry = QgsGeometry() );
903902

904903
QMap<Property, QVariant> dataDefinedValues;
905904

src/core/qgsrulebasedlabeling.cpp

+3-3
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ bool QgsRuleBasedLabelProvider::prepare( const QgsRenderContext &context, QSet<Q
3737
return true;
3838
}
3939

40-
void QgsRuleBasedLabelProvider::registerFeature( QgsFeature &feature, QgsRenderContext &context, const QgsGeometry &obstacleGeometry )
40+
void QgsRuleBasedLabelProvider::registerFeature( const QgsFeature &feature, QgsRenderContext &context, const QgsGeometry &obstacleGeometry )
4141
{
4242
// will register the feature to relevant sub-providers
4343
mRules->rootRule()->registerFeature( feature, context, mSubProviders, obstacleGeometry );
@@ -316,7 +316,7 @@ void QgsRuleBasedLabeling::Rule::prepare( const QgsRenderContext &context, QSet<
316316
}
317317
}
318318

319-
QgsRuleBasedLabeling::Rule::RegisterResult QgsRuleBasedLabeling::Rule::registerFeature( QgsFeature &feature, QgsRenderContext &context, QgsRuleBasedLabeling::RuleToProviderMap &subProviders, const QgsGeometry &obstacleGeometry )
319+
QgsRuleBasedLabeling::Rule::RegisterResult QgsRuleBasedLabeling::Rule::registerFeature( const QgsFeature &feature, QgsRenderContext &context, QgsRuleBasedLabeling::RuleToProviderMap &subProviders, const QgsGeometry &obstacleGeometry )
320320
{
321321
if ( !isFilterOK( feature, context )
322322
|| !isScaleOK( context.rendererScale() ) )
@@ -363,7 +363,7 @@ QgsRuleBasedLabeling::Rule::RegisterResult QgsRuleBasedLabeling::Rule::registerF
363363
return Filtered;
364364
}
365365

366-
bool QgsRuleBasedLabeling::Rule::isFilterOK( QgsFeature &f, QgsRenderContext &context ) const
366+
bool QgsRuleBasedLabeling::Rule::isFilterOK( const QgsFeature &f, QgsRenderContext &context ) const
367367
{
368368
if ( ! mFilter || mElseRule )
369369
return true;

src/core/qgsrulebasedlabeling.h

+3-3
Original file line numberDiff line numberDiff line change
@@ -282,7 +282,7 @@ class CORE_EXPORT QgsRuleBasedLabeling : public QgsAbstractVectorLayerLabeling
282282
* register individual features
283283
* \note not available in Python bindings
284284
*/
285-
RegisterResult registerFeature( QgsFeature &feature, QgsRenderContext &context, RuleToProviderMap &subProviders, const QgsGeometry &obstacleGeometry = QgsGeometry() ) SIP_SKIP;
285+
RegisterResult registerFeature( const QgsFeature &feature, QgsRenderContext &context, RuleToProviderMap &subProviders, const QgsGeometry &obstacleGeometry = QgsGeometry() ) SIP_SKIP;
286286

287287
/**
288288
* Returns true if this rule or any of its children requires advanced composition effects
@@ -302,7 +302,7 @@ class CORE_EXPORT QgsRuleBasedLabeling : public QgsAbstractVectorLayerLabeling
302302
* \param context The context in which the rendering happens
303303
* \returns True if the feature shall be rendered
304304
*/
305-
bool isFilterOK( QgsFeature &f, QgsRenderContext &context ) const;
305+
bool isFilterOK( const QgsFeature &f, QgsRenderContext &context ) const;
306306

307307
/**
308308
* Check if this rule applies for a given \a scale.
@@ -395,7 +395,7 @@ class CORE_EXPORT QgsRuleBasedLabelProvider : public QgsVectorLayerLabelProvider
395395

396396
bool prepare( const QgsRenderContext &context, QSet<QString> &attributeNames ) override;
397397

398-
void registerFeature( QgsFeature &feature, QgsRenderContext &context, const QgsGeometry &obstacleGeometry = QgsGeometry() ) override;
398+
void registerFeature( const QgsFeature &feature, QgsRenderContext &context, const QgsGeometry &obstacleGeometry = QgsGeometry() ) override;
399399

400400
//! create a label provider
401401
virtual QgsVectorLayerLabelProvider *createProvider( QgsVectorLayer *layer, const QString &providerId, bool withFeatureLoop, const QgsPalLayerSettings *settings );

src/core/qgsvectorlayerlabelprovider.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -258,7 +258,7 @@ QList<QgsLabelFeature *> QgsVectorLayerLabelProvider::labelFeatures( QgsRenderCo
258258
return mLabels;
259259
}
260260

261-
void QgsVectorLayerLabelProvider::registerFeature( QgsFeature &feature, QgsRenderContext &context, const QgsGeometry &obstacleGeometry )
261+
void QgsVectorLayerLabelProvider::registerFeature( const QgsFeature &feature, QgsRenderContext &context, const QgsGeometry &obstacleGeometry )
262262
{
263263
QgsLabelFeature *label = nullptr;
264264
mSettings.registerFeature( feature, context, &label, obstacleGeometry );

src/core/qgsvectorlayerlabelprovider.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ class CORE_EXPORT QgsVectorLayerLabelProvider : public QgsAbstractLabelProvider
7474
* symbol, the obstacle geometry should represent the bounds of the offset symbol). If not set,
7575
* the feature's original geometry will be used as an obstacle for labels.
7676
*/
77-
virtual void registerFeature( QgsFeature &feature, QgsRenderContext &context, const QgsGeometry &obstacleGeometry = QgsGeometry() );
77+
virtual void registerFeature( const QgsFeature &feature, QgsRenderContext &context, const QgsGeometry &obstacleGeometry = QgsGeometry() );
7878

7979
/**
8080
* Returns the geometry for a point feature which should be used as an obstacle for labels. This

0 commit comments

Comments
 (0)