Skip to content

Commit

Permalink
Sort label providers to make labeling deterministic
Browse files Browse the repository at this point in the history
  • Loading branch information
Patrik Sylve committed Jan 29, 2025
1 parent d1c2651 commit e1295d9
Showing 1 changed file with 37 additions and 2 deletions.
39 changes: 37 additions & 2 deletions src/core/pal/pal.h
Original file line number Diff line number Diff line change
Expand Up @@ -37,13 +37,48 @@
#include "qgsgeometry.h"
#include "qgsgeos.h"
#include "qgssettingstree.h"
#include "qgslabelingengine.h"

#include <QList>
#include <iostream>
#include <ctime>
#include <QMutex>
#include <QStringList>
#include <unordered_map>

struct CompareLabelProvider
{
bool operator()( const QgsAbstractLabelProvider *lhs, const QgsAbstractLabelProvider *rhs ) const
{
if ( !lhs )
{
return true;
}
if ( !rhs )
{
return false;
}

QString lhsProviderId = lhs->providerId();
QString rhsProviderId = rhs->providerId();

if ( !lhsProviderId.isEmpty() && !rhsProviderId.isEmpty() )
{
return lhsProviderId < rhsProviderId;
}
else if ( !lhsProviderId.isEmpty() )
{
return true;
}
else if ( !rhsProviderId.isEmpty() )
{
return false;
}
else
{
return lhs->layerId() < rhs->layerId();
}
}
};

class QgsSettingsEntryInteger;

Expand Down Expand Up @@ -279,7 +314,7 @@ namespace pal

private:

std::unordered_map< QgsAbstractLabelProvider *, std::unique_ptr< Layer > > mLayers;
std::map< QgsAbstractLabelProvider *, std::unique_ptr< Layer >, CompareLabelProvider > mLayers;

QList< QgsAbstractLabelingEngineRule * > mRules;

Expand Down

0 comments on commit e1295d9

Please sign in to comment.