Skip to content

Commit 70fc8ca

Browse files
committed
WMS server GetLegendGraphics: differentiate between layer space and layer title space
1 parent c11df1a commit 70fc8ca

File tree

4 files changed

+31
-13
lines changed

4 files changed

+31
-13
lines changed

src/mapserver/qgsconfigparser.cpp

+1
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,7 @@ void QgsConfigParser::setDefaultLegendSettings()
6969
{
7070
mLegendBoxSpace = 2;
7171
mLegendLayerSpace = 3;
72+
mLegendLayerTitleSpace = 3;
7273
mLegendSymbolSpace = 2;
7374
mLegendIconLabelSpace = 2;
7475
mLegendSymbolWidth = 7;

src/mapserver/qgsconfigparser.h

+2
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,7 @@ class QgsConfigParser
8888

8989
double legendBoxSpace() const { return mLegendBoxSpace; }
9090
double legendLayerSpace() const { return mLegendLayerSpace; }
91+
double legendLayerTitleSpace() const { return mLegendLayerTitleSpace; }
9192
double legendSymbolSpace() const { return mLegendSymbolSpace; }
9293
double legendIconLabelSpace() const { return mLegendIconLabelSpace; }
9394
double legendSymbolWidth() const { return mLegendSymbolWidth; }
@@ -174,6 +175,7 @@ class QgsConfigParser
174175
//various parameters used for GetLegendGraphics
175176
double mLegendBoxSpace;
176177
double mLegendLayerSpace;
178+
double mLegendLayerTitleSpace;
177179
double mLegendSymbolSpace;
178180
double mLegendIconLabelSpace;
179181
double mLegendSymbolWidth;

src/mapserver/qgswmsserver.cpp

+25-10
Original file line numberDiff line numberDiff line change
@@ -306,11 +306,11 @@ QImage* QgsWMSServer::getLegendGraphics()
306306
double fontOversamplingFactor = 10.0;
307307

308308
//get icon size, spaces between legend items and font from config parser
309-
double boxSpace, layerSpace, symbolSpace, iconLabelSpace, symbolWidth, symbolHeight;
309+
double boxSpace, layerSpace, layerTitleSpace, symbolSpace, iconLabelSpace, symbolWidth, symbolHeight;
310310
QFont layerFont, itemFont;
311311
QColor layerFontColor, itemFontColor;
312-
legendParameters( mmToPixelFactor, fontOversamplingFactor, boxSpace, layerSpace, symbolSpace, iconLabelSpace, symbolWidth, symbolHeight,
313-
layerFont, itemFont, layerFontColor, itemFontColor );
312+
legendParameters( mmToPixelFactor, fontOversamplingFactor, boxSpace, layerSpace, layerTitleSpace, symbolSpace,
313+
iconLabelSpace, symbolWidth, symbolHeight, layerFont, itemFont, layerFontColor, itemFontColor );
314314

315315
//first find out image dimensions without painting
316316
QStandardItem* rootItem = legendModel.invisibleRootItem();
@@ -331,9 +331,12 @@ QImage* QgsWMSServer::getLegendGraphics()
331331
QgsComposerLayerItem* layerItem = dynamic_cast<QgsComposerLayerItem*>( rootItem->child( i ) );
332332
if ( layerItem )
333333
{
334-
334+
if ( i > 0 )
335+
{
336+
currentY += layerSpace;
337+
}
335338
drawLegendLayerItem( layerItem, 0, maxTextWidth, maxSymbolWidth, currentY, layerFont, layerFontColor, itemFont, itemFontColor,
336-
boxSpace, layerSpace, symbolSpace, iconLabelSpace, symbolWidth, symbolHeight, fontOversamplingFactor,
339+
boxSpace, layerSpace, layerTitleSpace, symbolSpace, iconLabelSpace, symbolWidth, symbolHeight, fontOversamplingFactor,
337340
theImage->dotsPerMeterX() * 0.0254 );
338341
}
339342
}
@@ -352,18 +355,24 @@ QImage* QgsWMSServer::getLegendGraphics()
352355
QgsComposerLayerItem* layerItem = dynamic_cast<QgsComposerLayerItem*>( rootItem->child( i ) );
353356
if ( layerItem )
354357
{
358+
if ( i > 0 )
359+
{
360+
currentY += layerSpace;
361+
}
355362
drawLegendLayerItem( layerItem, &p, maxTextWidth, maxSymbolWidth, currentY, layerFont, layerFontColor, itemFont, itemFontColor, boxSpace,
356-
layerSpace, symbolSpace, iconLabelSpace, symbolWidth, symbolHeight, fontOversamplingFactor,
363+
layerSpace, layerTitleSpace, symbolSpace, iconLabelSpace, symbolWidth, symbolHeight, fontOversamplingFactor,
357364
theImage->dotsPerMeterX() * 0.0254 );
358365
}
366+
currentY += layerSpace;
359367
}
360368

361369
QgsMapLayerRegistry::instance()->mapLayers().clear();
362370
delete theImage;
363371
return paintImage;
364372
}
365373

366-
void QgsWMSServer::legendParameters( double mmToPixelFactor, double fontOversamplingFactor, double& boxSpace, double& layerSpace, double& symbolSpace, double& iconLabelSpace, double& symbolWidth, double& symbolHeight,
374+
void QgsWMSServer::legendParameters( double mmToPixelFactor, double fontOversamplingFactor, double& boxSpace, double& layerSpace, double& layerTitleSpace,
375+
double& symbolSpace, double& iconLabelSpace, double& symbolWidth, double& symbolHeight,
367376
QFont& layerFont, QFont& itemFont, QColor& layerFontColor, QColor& itemFontColor )
368377
{
369378
//spaces between legend elements
@@ -373,6 +382,9 @@ void QgsWMSServer::legendParameters( double mmToPixelFactor, double fontOversamp
373382
QMap<QString, QString>::const_iterator layerSpaceIt = mParameterMap.find( "LAYERSPACE" );
374383
layerSpace = ( layerSpaceIt == mParameterMap.constEnd() ) ? mConfigParser->legendLayerSpace() * mmToPixelFactor :
375384
layerSpaceIt.value().toDouble() * mmToPixelFactor;
385+
QMap<QString, QString>::const_iterator layerTitleSpaceIt = mParameterMap.find( "LAYERTITLESPACE" );
386+
layerTitleSpace = ( layerTitleSpaceIt == mParameterMap.constEnd() ) ? mConfigParser->legendLayerTitleSpace() * mmToPixelFactor :
387+
layerTitleSpaceIt.value().toDouble() * mmToPixelFactor;
376388
QMap<QString, QString>::const_iterator symbolSpaceIt = mParameterMap.find( "SYMBOLSPACE" );
377389
symbolSpace = ( symbolSpaceIt == mParameterMap.constEnd() ) ? mConfigParser->legendSymbolSpace() * mmToPixelFactor :
378390
symbolSpaceIt.value().toDouble() * mmToPixelFactor;
@@ -1430,7 +1442,7 @@ QStringList QgsWMSServer::layerSet( const QStringList &layersList,
14301442

14311443
void QgsWMSServer::drawLegendLayerItem( QgsComposerLayerItem* item, QPainter* p, double& maxTextWidth, double& maxSymbolWidth, double& currentY, const QFont& layerFont,
14321444
const QColor& layerFontColor, const QFont& itemFont, const QColor& itemFontColor, double boxSpace, double layerSpace,
1433-
double symbolSpace, double iconLabelSpace, double symbolWidth, double symbolHeight, double fontOversamplingFactor,
1445+
double layerTitleSpace, double symbolSpace, double iconLabelSpace, double symbolWidth, double symbolHeight, double fontOversamplingFactor,
14341446
double dpi ) const
14351447
{
14361448
if ( !item )
@@ -1460,7 +1472,7 @@ void QgsWMSServer::drawLegendLayerItem( QgsComposerLayerItem* item, QPainter* p,
14601472
}
14611473
}
14621474

1463-
currentY += layerSpace;
1475+
currentY += layerTitleSpace;
14641476

14651477
int opacity = 0;
14661478
QgsMapLayer* layerInstance = QgsMapLayerRegistry::instance()->mapLayer( item->layerID() );
@@ -1542,7 +1554,10 @@ void QgsWMSServer::drawLegendLayerItem( QgsComposerLayerItem* item, QPainter* p,
15421554
}
15431555

15441556
currentY += symbolItemHeight;
1545-
currentY += symbolSpace;
1557+
if ( i < ( nChildItems - 1 ) )
1558+
{
1559+
currentY += symbolSpace;
1560+
}
15461561
}
15471562
}
15481563

src/mapserver/qgswmsserver.h

+3-3
Original file line numberDiff line numberDiff line change
@@ -133,7 +133,7 @@ class QgsWMSServer
133133
*/
134134
void drawLegendLayerItem( QgsComposerLayerItem* item, QPainter* p, double& maxTextWidth, double& maxSymbolWidth, double& currentY, const QFont& layerFont,
135135
const QColor& layerFontColor, const QFont& itemFont, const QColor& itemFontColor, double boxSpace, double layerSpace,
136-
double symbolSpace, double iconLabelSpace, double symbolWidth, double symbolHeight, double fontOversamplingFactor, double dpi ) const;
136+
double layerTitleSpace, double symbolSpace, double iconLabelSpace, double symbolWidth, double symbolHeight, double fontOversamplingFactor, double dpi ) const;
137137
/**Draws a (old generation) symbol. Optionally, maxHeight is adapted (e.g. for large point markers) */
138138
void drawLegendSymbol( QgsComposerLegendItem* item, QPainter* p, double boxSpace, double currentY, double& symbolWidth, double& symbolHeight,
139139
double layerOpacity, double dpi, double yDownShift ) const;
@@ -144,8 +144,8 @@ class QgsWMSServer
144144
void drawRasterSymbol( QgsComposerLegendItem* item, QPainter* p, double boxSpace, double currentY, double symbolWidth, double symbolHeight, double yDownShift ) const;
145145

146146
/**Read legend parameter from the request or from the first print composer in the project*/
147-
void legendParameters( double mmToPixelFactor, double fontOversamplingFactor, double& boxSpace, double& layerSpace, double& symbolSpace, double& iconLabelSpace, double& symbolWidth, double& symbolHeight,
148-
QFont& layerFont, QFont& itemFont, QColor& layerFontColor, QColor& itemFontColor );
147+
void legendParameters( double mmToPixelFactor, double fontOversamplingFactor, double& boxSpace, double& layerSpace, double& layerTitleSpace,
148+
double& symbolSpace, double& iconLabelSpace, double& symbolWidth, double& symbolHeight, QFont& layerFont, QFont& itemFont, QColor& layerFontColor, QColor& itemFontColor );
149149

150150
QImage* printCompositionToImage( QgsComposition* c ) const;
151151

0 commit comments

Comments
 (0)