Skip to content

Commit

Permalink
Make containsAdvancedEffects function more accurate
Browse files Browse the repository at this point in the history
by skipping layers that fall outside visible scale range
  • Loading branch information
nirvn committed Feb 27, 2020
1 parent c90fbd5 commit 7f54853
Show file tree
Hide file tree
Showing 2 changed files with 23 additions and 1 deletion.
2 changes: 1 addition & 1 deletion src/core/qgsmapsettingsutils.cpp
Expand Up @@ -31,7 +31,7 @@ const QStringList QgsMapSettingsUtils::containsAdvancedEffects( const QgsMapSett
const auto constLayers = mapSettings.layers();
for ( QgsMapLayer *layer : constLayers )
{
if ( layer )
if ( layer && layer->isInScaleRange( mapSettings.scale() ) )
{
if ( layer->blendMode() != QPainter::CompositionMode_SourceOver )
{
Expand Down
22 changes: 22 additions & 0 deletions tests/src/core/testqgsmapsettingsutils.cpp
Expand Up @@ -19,6 +19,7 @@

#include "qgsmapsettings.h"
#include "qgsmapsettingsutils.h"
#include "qgsvectorlayer.h"

#include <QString>

Expand All @@ -33,6 +34,7 @@ class TestQgsMapSettingsUtils : public QObject
void cleanup() {} // will be called after each testfunction was executed.

void createWorldFileContent(); //test world file content function
void containsAdvancedEffects(); //test contains advanced effects function

private:

Expand Down Expand Up @@ -66,5 +68,25 @@ void TestQgsMapSettingsUtils::createWorldFileContent()
QCOMPARE( QgsMapSettingsUtils::worldFileContent( mMapSettings ), QString( "-0.81915204428899191\r\n0.57357643635104594\r\n0.57357643635104594\r\n0.81915204428899191\r\n0.5\r\n0.49999999999999994\r\n" ) );
}

void TestQgsMapSettingsUtils::containsAdvancedEffects()
{
QgsMapSettings mapSettings = mMapSettings;

std::unique_ptr< QgsVectorLayer > layer( new QgsVectorLayer( QStringLiteral( "Point?field=col1:real" ), QStringLiteral( "layer" ), QStringLiteral( "memory" ) ) );
layer->setBlendMode( QPainter::CompositionMode_Multiply );

QList<QgsMapLayer *> layers;
layers << layer.get();
mapSettings.setLayers( layers );

QCOMPARE( QgsMapSettingsUtils::containsAdvancedEffects( mapSettings ).size(), 1 );

// set the layer scale-based visibility so it falls outside of the map settings scale
layer->setScaleBasedVisibility( true );
layer->setMaximumScale( 10 );

QCOMPARE( QgsMapSettingsUtils::containsAdvancedEffects( mapSettings ).size(), 0 );
}

QGSTEST_MAIN( TestQgsMapSettingsUtils )
#include "testqgsmapsettingsutils.moc"

0 comments on commit 7f54853

Please sign in to comment.