Skip to content

Commit

Permalink
[api] add unplaced label handling to the QgsLabelSink class
Browse files Browse the repository at this point in the history
  • Loading branch information
nirvn committed Jan 6, 2022
1 parent 0982260 commit a0a6243
Show file tree
Hide file tree
Showing 2 changed files with 31 additions and 0 deletions.
12 changes: 12 additions & 0 deletions src/core/labeling/qgslabelsink.cpp
Expand Up @@ -32,6 +32,12 @@ void QgsLabelSinkProvider::drawLabel( QgsRenderContext &context, pal::LabelPosit
mLabelSink->drawLabel( layerId(), context, label, mSettings );
}

void QgsLabelSinkProvider::drawUnplacedLabel( QgsRenderContext &context, pal::LabelPosition *label ) const
{
Q_ASSERT( mLabelSink );
mLabelSink->drawUnplacedLabel( layerId(), context, label, mSettings );
}

QgsRuleBasedLabelSinkProvider::QgsRuleBasedLabelSinkProvider( const QgsRuleBasedLabeling &rules, QgsVectorLayer *layer, QgsLabelSink *sink )
: QgsRuleBasedLabelProvider( rules, layer, false )
, mLabelSink( sink )
Expand All @@ -55,3 +61,9 @@ void QgsRuleBasedLabelSinkProvider::drawLabel( QgsRenderContext &context, pal::L
Q_ASSERT( mLabelSink );
mLabelSink->drawLabel( layerId(), context, label, mSettings );
}

void QgsRuleBasedLabelSinkProvider::drawUnplacedLabel( QgsRenderContext &context, pal::LabelPosition *label ) const
{
Q_ASSERT( mLabelSink );
mLabelSink->drawUnplacedLabel( layerId(), context, label, mSettings );
}
19 changes: 19 additions & 0 deletions src/core/labeling/qgslabelsink.h
Expand Up @@ -45,6 +45,23 @@ class QgsLabelSink
* to another desired location.
*/
virtual void drawLabel( const QString &layerId, QgsRenderContext &context, pal::LabelPosition *label, const QgsPalLayerSettings &settings ) = 0;

/**
* The drawLabel method is called for each unplaced label.
* \param layerId The layer ID associated to the label
* \param context The render context object
* \param label The label object
* \param settings The layer labeling settings
* \since QGIS 3.24
*/
virtual void drawUnplacedLabel( const QString &layerId, QgsRenderContext &context, pal::LabelPosition *label, const QgsPalLayerSettings &settings )
{
Q_UNUSED( layerId );
Q_UNUSED( context )
Q_UNUSED( label );
Q_UNUSED( settings );
return;
}
};

/**
Expand All @@ -61,6 +78,7 @@ class QgsLabelSinkProvider : public QgsVectorLayerLabelProvider
explicit QgsLabelSinkProvider( QgsVectorLayer *layer, const QString &providerId, QgsLabelSink *sink, const QgsPalLayerSettings *settings );

void drawLabel( QgsRenderContext &context, pal::LabelPosition *label ) const override;
void drawUnplacedLabel( QgsRenderContext &context, pal::LabelPosition *label ) const override;

private:
QgsLabelSink *mLabelSink = nullptr;
Expand All @@ -86,6 +104,7 @@ class QgsRuleBasedLabelSinkProvider : public QgsRuleBasedLabelProvider
Q_DECL_DEPRECATED void reinit( QgsVectorLayer *layer );

void drawLabel( QgsRenderContext &context, pal::LabelPosition *label ) const override;
void drawUnplacedLabel( QgsRenderContext &context, pal::LabelPosition *label ) const override;

//! Creates a QgsRuleBasedLabelSinkProvider
QgsVectorLayerLabelProvider *createProvider( QgsVectorLayer *layer, const QString &providerId, bool withFeatureLoop, const QgsPalLayerSettings *settings ) override;
Expand Down

0 comments on commit a0a6243

Please sign in to comment.