27
27
#include < qgsvectorlayerlabelprovider.h>
28
28
#include " qgsrenderchecker.h"
29
29
#include " qgsfontutils.h"
30
+ #include " qgsnullsymbolrenderer.h"
30
31
31
32
class TestQgsLabelingEngine : public QObject
32
33
{
@@ -48,6 +49,7 @@ class TestQgsLabelingEngine : public QObject
48
49
void testCapitalization ();
49
50
void testParticipatingLayers ();
50
51
void testRegisterFeatureUnprojectible ();
52
+ void testRotateHidePartial ();
51
53
52
54
private:
53
55
QgsVectorLayer *vl = nullptr ;
@@ -623,5 +625,73 @@ void TestQgsLabelingEngine::testRegisterFeatureUnprojectible()
623
625
QCOMPARE ( provider->mLabels .size (), 0 );
624
626
}
625
627
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
+
626
696
QGSTEST_MAIN ( TestQgsLabelingEngine )
627
697
#include " testqgslabelingengine.moc"
0 commit comments