Skip to content

Commit c8fe22c

Browse files
committedJan 18, 2018
Add test for hiding partial labels with rotated canvas
1 parent b59e158 commit c8fe22c

File tree

2 files changed

+70
-0
lines changed

2 files changed

+70
-0
lines changed
 

‎tests/src/core/testqgslabelingengine.cpp

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
#include <qgsvectorlayerlabelprovider.h>
2828
#include "qgsrenderchecker.h"
2929
#include "qgsfontutils.h"
30+
#include "qgsnullsymbolrenderer.h"
3031

3132
class TestQgsLabelingEngine : public QObject
3233
{
@@ -48,6 +49,7 @@ class TestQgsLabelingEngine : public QObject
4849
void testCapitalization();
4950
void testParticipatingLayers();
5051
void testRegisterFeatureUnprojectible();
52+
void testRotateHidePartial();
5153

5254
private:
5355
QgsVectorLayer *vl = nullptr;
@@ -623,5 +625,73 @@ void TestQgsLabelingEngine::testRegisterFeatureUnprojectible()
623625
QCOMPARE( provider->mLabels.size(), 0 );
624626
}
625627

628+
void TestQgsLabelingEngine::testRotateHidePartial()
629+
{
630+
QgsPalLayerSettings settings;
631+
setDefaultLabelParams( settings );
632+
633+
QgsTextFormat format = settings.format();
634+
format.setSize( 20 );
635+
format.setColor( QColor( 0, 0, 0 ) );
636+
settings.setFormat( format );
637+
638+
settings.fieldName = QStringLiteral( "'label'" );
639+
settings.isExpression = true;
640+
settings.placement = QgsPalLayerSettings::OverPoint;
641+
642+
std::unique_ptr< QgsVectorLayer> vl2( new QgsVectorLayer( QStringLiteral( "polygon?crs=epsg:4326&field=id:integer" ), QStringLiteral( "vl" ), QStringLiteral( "memory" ) ) );
643+
vl2->setRenderer( new QgsNullSymbolRenderer() );
644+
645+
QgsVectorLayerLabelProvider *provider = new QgsVectorLayerLabelProvider( vl2.get(), QStringLiteral( "test" ), true, &settings );
646+
QgsFeature f( vl2->fields(), 1 );
647+
648+
f.setGeometry( QgsGeometry().fromWkt( QStringLiteral( "POLYGON((0 0,8 0,8 8,0 8,0 0))" ) ) );
649+
vl2->dataProvider()->addFeature( f );
650+
f.setGeometry( QgsGeometry().fromWkt( QStringLiteral( "POLYGON((20 20,28 20,28 28,20 28,20 20))" ) ) );
651+
vl2->dataProvider()->addFeature( f );
652+
f.setGeometry( QgsGeometry().fromWkt( QStringLiteral( "POLYGON((0 20,8 20,8 28,0 28,0 20))" ) ) );
653+
vl2->dataProvider()->addFeature( f );
654+
655+
vl2->setLabeling( new QgsVectorLayerSimpleLabeling( settings ) ); // TODO: this should not be necessary!
656+
657+
// make a fake render context
658+
QSize size( 640, 480 );
659+
QgsMapSettings mapSettings;
660+
QgsCoordinateReferenceSystem tgtCrs;
661+
tgtCrs.createFromString( QStringLiteral( "EPSG:4326" ) );
662+
mapSettings.setDestinationCrs( tgtCrs );
663+
664+
mapSettings.setOutputSize( size );
665+
mapSettings.setExtent( vl2->extent() );
666+
mapSettings.setLayers( QList<QgsMapLayer *>() << vl2.get() );
667+
mapSettings.setOutputDpi( 96 );
668+
mapSettings.setRotation( 45 );
669+
670+
QgsLabelingEngineSettings engineSettings = mapSettings.labelingEngineSettings();
671+
engineSettings.setFlag( QgsLabelingEngineSettings::UsePartialCandidates, false );
672+
engineSettings.setFlag( QgsLabelingEngineSettings::DrawLabelRectOnly, true );
673+
mapSettings.setLabelingEngineSettings( engineSettings );
674+
675+
QgsMapRendererSequentialJob job( mapSettings );
676+
job.start();
677+
job.waitForFinished();
678+
679+
QImage img = job.renderedImage();
680+
681+
QPainter p( &img );
682+
QgsRenderContext context = QgsRenderContext::fromMapSettings( mapSettings );
683+
context.setPainter( &p );
684+
685+
QgsLabelingEngine engine;
686+
engine.setMapSettings( mapSettings );
687+
engine.addProvider( provider );
688+
689+
engine.run( context );
690+
p.end();
691+
engine.removeProvider( provider );
692+
693+
QVERIFY( imageCheck( "label_rotate_hide_partial", img, 20 ) );
694+
}
695+
626696
QGSTEST_MAIN( TestQgsLabelingEngine )
627697
#include "testqgslabelingengine.moc"

0 commit comments

Comments
 (0)
Please sign in to comment.