Skip to content

Commit f075109

Browse files
authored
Merge pull request #8793 from elpaso/bugfix-20693-server-LAYERTITLESPACE
[server] Respect layer title space when rendering legends
2 parents ed9c9b3 + 7d592a0 commit f075109

File tree

37 files changed

+46
-7
lines changed

37 files changed

+46
-7
lines changed

src/core/qgslegendrenderer.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -543,6 +543,7 @@ QSizeF QgsLegendRenderer::drawLayerTitle( QgsLayerTreeLayer *nodeLayer, QPainter
543543
}
544544
}
545545
size.rheight() = y - point.y();
546+
size.rheight() += mSettings.style( nodeLegendStyle( nodeLayer ) ).margin( QgsLegendStyle::Side::Bottom );
546547

547548
return size;
548549
}

src/server/services/wms/qgswmsparameters.cpp

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1109,12 +1109,13 @@ namespace QgsWms
11091109
settings.setBoxSpace( boxSpaceAsDouble() );
11101110
settings.setSymbolSize( QSizeF( symbolWidthAsDouble(), symbolHeightAsDouble() ) );
11111111

1112-
settings.rstyle( QgsLegendStyle::Subgroup ).setMargin( QgsLegendStyle::Top, layerSpaceAsDouble() );
1113-
settings.rstyle( QgsLegendStyle::Subgroup ).setFont( layerFont() );
1112+
settings.rstyle( QgsLegendStyle::Style::Subgroup ).setMargin( QgsLegendStyle::Side::Top, layerSpaceAsDouble() );
1113+
settings.rstyle( QgsLegendStyle::Style::Subgroup ).setMargin( QgsLegendStyle::Side::Bottom, layerTitleSpaceAsDouble() );
1114+
settings.rstyle( QgsLegendStyle::Style::Subgroup ).setFont( layerFont() );
11141115

1115-
settings.rstyle( QgsLegendStyle::SymbolLabel ).setFont( itemFont() );
1116-
settings.rstyle( QgsLegendStyle::Symbol ).setMargin( QgsLegendStyle::Top, symbolSpaceAsDouble() );
1117-
settings.rstyle( QgsLegendStyle::SymbolLabel ).setMargin( QgsLegendStyle::Left, iconLabelSpaceAsDouble() );
1116+
settings.rstyle( QgsLegendStyle::Style::SymbolLabel ).setFont( itemFont() );
1117+
settings.rstyle( QgsLegendStyle::Style::Symbol ).setMargin( QgsLegendStyle::Side::Top, symbolSpaceAsDouble() );
1118+
settings.rstyle( QgsLegendStyle::Style::SymbolLabel ).setMargin( QgsLegendStyle::Side::Left, iconLabelSpaceAsDouble() );
11181119

11191120
return settings;
11201121
}

tests/src/python/test_qgsserver.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -185,6 +185,10 @@ def _img_diff(self, image, control_image, max_diff, max_size_diff=QSize()):
185185
return control.compareImages(control_image, max_diff), control.report()
186186

187187
def _img_diff_error(self, response, headers, image, max_diff=100, max_size_diff=QSize()):
188+
189+
reference_path = unitTestDataPath('control_images') + '/qgis_server/' + image + '/' + image + '.png'
190+
self.store_reference(reference_path, response)
191+
188192
self.assertEqual(
189193
headers.get("Content-Type"), "image/png",
190194
"Content type is wrong: %s\n%s" % (headers.get("Content-Type"), response))

tests/src/python/test_qgsserver_accesscontrol.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -217,6 +217,10 @@ def _img_diff(self, image, control_image, max_diff, max_size_diff=QSize()):
217217
return control.compareImages(control_image), control.report()
218218

219219
def _img_diff_error(self, response, headers, image, max_diff=10, max_size_diff=QSize()):
220+
221+
reference_path = unitTestDataPath('control_images') + '/qgis_server_accesscontrol/' + image + '/' + image + '.png'
222+
self.store_reference(reference_path, response)
223+
220224
self.assertEqual(
221225
headers.get("Content-Type"), "image/png",
222226
"Content type is wrong: %s" % headers.get("Content-Type"))

tests/src/python/test_qgsserver_accesscontrol_wms_getlegendgraphic.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,9 @@
2424

2525
class TestQgsServerAccessControlWMSGetlegendgraphic(TestQgsServerAccessControl):
2626

27+
# Set to True to re-generate reference files for this class
28+
#regenerate_reference = True
29+
2730
def test_wms_getlegendgraphic_hello(self):
2831
query_string = "&".join(["%s=%s" % i for i in list({
2932
"MAP": urllib.parse.quote(self.projectPath),

tests/src/python/test_qgsserver_wms_getlegendgraphic.py

Lines changed: 28 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,9 +40,11 @@
4040

4141

4242
class TestQgsServerWMSGetLegendGraphic(QgsServerTestBase):
43-
4443
"""QGIS Server WMS Tests for GetLegendGraphic request"""
4544

45+
# Set to True to re-generate reference files for this class
46+
#regenerate_reference = True
47+
4648
def test_getLegendGraphics(self):
4749
"""Test that does not return an exception but an image"""
4850
parms = {
@@ -103,7 +105,31 @@ def test_wms_GetLegendGraphic_LayerSpace(self):
103105
}.items())])
104106

105107
r, h = self._result(self._execute_request(qs))
106-
self._img_diff_error(r, h, "WMS_GetLegendGraphic_LayerSpace")
108+
self._img_diff_error(r, h, "WMS_GetLegendGraphic_LayerSpace", max_size_diff=QSize(1, 1))
109+
110+
def test_wms_GetLegendGraphic_LayerTitleSpace(self):
111+
qs = "?" + "&".join(["%s=%s" % i for i in list({
112+
"MAP": urllib.parse.quote(self.projectPath),
113+
"SERVICE": "WMS",
114+
"VERSION": "1.1.1",
115+
"REQUEST": "GetLegendGraphic",
116+
"LAYER": "Country,Hello",
117+
"FORMAT": "image/png",
118+
# "HEIGHT": "500",
119+
# "WIDTH": "500",
120+
"LAYERTITLESPACE": "20.0",
121+
"LAYERFONTBOLD": "TRUE",
122+
"LAYERFONTSIZE": "30",
123+
"ITEMFONTBOLD": "TRUE",
124+
"ITEMFONTSIZE": "20",
125+
"LAYERFONTFAMILY": self.fontFamily,
126+
"ITEMFONTFAMILY": self.fontFamily,
127+
"LAYERTITLE": "TRUE",
128+
"CRS": "EPSG:3857"
129+
}.items())])
130+
131+
r, h = self._result(self._execute_request(qs))
132+
self._img_diff_error(r, h, "WMS_GetLegendGraphic_LayerTitleSpace")
107133

108134
def test_wms_GetLegendGraphic_ShowFeatureCount(self):
109135
qs = "?" + "&".join(["%s=%s" % i for i in list({
21 Bytes
Loading
21 Bytes
Loading
21 Bytes
Loading
21 Bytes
Loading

0 commit comments

Comments
 (0)