Skip to content

Commit 0c5fa81

Browse files
committed
Fix huge legend item size when symbol uses map unit sizes (fix #13979)
Add unit test
1 parent e21de03 commit 0c5fa81

File tree

4 files changed

+39
-2
lines changed

4 files changed

+39
-2
lines changed

src/core/layertree/qgslayertreemodellegendnode.cpp

+2-2
Original file line numberDiff line numberDiff line change
@@ -362,15 +362,15 @@ QSizeF QgsSymbolV2LegendNode::drawSymbol( const QgsLegendSettings& settings, Ite
362362
//Consider symbol size for point markers
363363
double height = settings.symbolSize().height();
364364
double width = settings.symbolSize().width();
365-
double size = 0;
365+
366366
//Center small marker symbols
367367
double widthOffset = 0;
368368
double heightOffset = 0;
369369

370370
if ( QgsMarkerSymbolV2* markerSymbol = dynamic_cast<QgsMarkerSymbolV2*>( s ) )
371371
{
372372
// allow marker symbol to occupy bigger area if necessary
373-
size = QgsSymbolLayerV2Utils::convertToPainterUnits( context, markerSymbol->size(), s->outputUnit(), s->mapUnitScale() ) / context.scaleFactor();
373+
double size = QgsSymbolLayerV2Utils::convertToPainterUnits( context, markerSymbol->size(), markerSymbol->sizeUnit(), markerSymbol->sizeMapUnitScale() ) / context.scaleFactor();
374374
height = size;
375375
width = size;
376376
if ( width < settings.symbolSize().width() )

tests/src/core/testqgslegendrenderer.cpp

+37
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,7 @@ class TestQgsLegendRenderer : public QObject
110110

111111
void testBasic();
112112
void testBigMarker();
113+
void testMapUnits();
113114
void testLongSymbolText();
114115
void testThreeColumns();
115116
void testFilterByMap();
@@ -290,6 +291,42 @@ void TestQgsLegendRenderer::testBigMarker()
290291
QVERIFY( _verifyImage( testName, mReport ) );
291292
}
292293

294+
void TestQgsLegendRenderer::testMapUnits()
295+
{
296+
QString testName = "legend_mapunits";
297+
298+
QgsMarkerSymbolV2* sym = new QgsMarkerSymbolV2();
299+
sym->setColor( Qt::red );
300+
sym->setSize( 100 );
301+
sym->setSizeUnit( QgsSymbolV2::MapUnit );
302+
QgsCategorizedSymbolRendererV2* catRenderer = dynamic_cast<QgsCategorizedSymbolRendererV2*>( mVL3->rendererV2() );
303+
QVERIFY( catRenderer );
304+
catRenderer->updateCategorySymbol( 0, sym );
305+
306+
sym = new QgsMarkerSymbolV2();
307+
sym->setColor( Qt::green );
308+
sym->setSize( 300 );
309+
sym->setSizeUnit( QgsSymbolV2::MapUnit );
310+
catRenderer->updateCategorySymbol( 1, sym );
311+
312+
sym = new QgsMarkerSymbolV2();
313+
sym->setColor( Qt::blue );
314+
sym->setSize( 5 );
315+
sym->setSizeUnit( QgsSymbolV2::MM );
316+
catRenderer->updateCategorySymbol( 2, sym );
317+
318+
QgsLayerTreeGroup* root = new QgsLayerTreeGroup();
319+
root->addLayer( mVL3 );
320+
QgsLayerTreeModel legendModel( root );
321+
322+
QgsLegendSettings settings;
323+
_setStandardTestFont( settings );
324+
settings.setMmPerMapUnit( 0.1 );
325+
settings.setMapScale( 1000 );
326+
_renderLegend( testName, &legendModel, settings );
327+
QVERIFY( _verifyImage( testName, mReport ) );
328+
}
329+
293330
void TestQgsLegendRenderer::testLongSymbolText()
294331
{
295332
QString testName = "legend_long_symbol_text";
Loading

0 commit comments

Comments
 (0)