mirror of
https://github.com/qgis/QGIS.git
synced 2025-02-28 00:17:30 -05:00
Fix double-rendering of layout legends on some circumstances
This commit is contained in:
parent
a2cbd9ceea
commit
99d50bb17a
@ -38,7 +38,13 @@ QgsLegendRenderer::QgsLegendRenderer( QgsLayerTreeModel *legendModel, const QgsL
|
|||||||
|
|
||||||
QSizeF QgsLegendRenderer::minimumSize( QgsRenderContext *renderContext )
|
QSizeF QgsLegendRenderer::minimumSize( QgsRenderContext *renderContext )
|
||||||
{
|
{
|
||||||
return paintAndDetermineSize( renderContext );
|
QPainter *prevPainter = renderContext ? renderContext->painter() : nullptr;
|
||||||
|
if ( renderContext )
|
||||||
|
renderContext->setPainter( nullptr );
|
||||||
|
const QSizeF res = paintAndDetermineSize( renderContext );
|
||||||
|
if ( renderContext )
|
||||||
|
renderContext->setPainter( prevPainter );
|
||||||
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
void QgsLegendRenderer::drawLegend( QPainter *painter )
|
void QgsLegendRenderer::drawLegend( QPainter *painter )
|
||||||
|
@ -37,6 +37,7 @@ from qgis.core import (QgsPrintLayout,
|
|||||||
QgsMapThemeCollection,
|
QgsMapThemeCollection,
|
||||||
QgsCategorizedSymbolRenderer,
|
QgsCategorizedSymbolRenderer,
|
||||||
QgsRendererCategory,
|
QgsRendererCategory,
|
||||||
|
QgsFillSymbol,
|
||||||
QgsApplication)
|
QgsApplication)
|
||||||
from qgis.testing import (start_app,
|
from qgis.testing import (start_app,
|
||||||
unittest
|
unittest
|
||||||
@ -167,6 +168,47 @@ class TestQgsLayoutItemLegend(unittest.TestCase, LayoutItemTestCase):
|
|||||||
|
|
||||||
QgsProject.instance().removeMapLayers([point_layer.id()])
|
QgsProject.instance().removeMapLayers([point_layer.id()])
|
||||||
|
|
||||||
|
def testResizeWithMapContentNoDoublePaint(self):
|
||||||
|
"""Test test legend resizes to match map content"""
|
||||||
|
poly_path = os.path.join(TEST_DATA_DIR, 'polys.shp')
|
||||||
|
poly_layer = QgsVectorLayer(poly_path, 'polys', 'ogr')
|
||||||
|
p = QgsProject()
|
||||||
|
p.addMapLayers([poly_layer])
|
||||||
|
|
||||||
|
fill_symbol = QgsFillSymbol.createSimple({'color': '255,0,0,125', 'outline_style': 'no'})
|
||||||
|
poly_layer.setRenderer(QgsSingleSymbolRenderer(fill_symbol))
|
||||||
|
|
||||||
|
s = QgsMapSettings()
|
||||||
|
s.setLayers([poly_layer])
|
||||||
|
layout = QgsLayout(p)
|
||||||
|
layout.initializeDefaults()
|
||||||
|
|
||||||
|
map = QgsLayoutItemMap(layout)
|
||||||
|
map.attemptSetSceneRect(QRectF(20, 20, 80, 80))
|
||||||
|
map.setFrameEnabled(True)
|
||||||
|
map.setLayers([poly_layer])
|
||||||
|
layout.addLayoutItem(map)
|
||||||
|
map.setExtent(poly_layer.extent())
|
||||||
|
|
||||||
|
legend = QgsLayoutItemLegend(layout)
|
||||||
|
legend.setTitle("Legend")
|
||||||
|
legend.attemptSetSceneRect(QRectF(120, 20, 80, 80))
|
||||||
|
legend.setFrameEnabled(True)
|
||||||
|
legend.setFrameStrokeWidth(QgsLayoutMeasurement(2))
|
||||||
|
legend.setBackgroundEnabled(False)
|
||||||
|
legend.setTitle('')
|
||||||
|
layout.addLayoutItem(legend)
|
||||||
|
legend.setLinkedMap(map)
|
||||||
|
|
||||||
|
map.setExtent(QgsRectangle(-102.51, 41.16, -102.36, 41.30))
|
||||||
|
|
||||||
|
checker = QgsLayoutChecker(
|
||||||
|
'composer_legend_size_content_no_double_paint', layout)
|
||||||
|
checker.setControlPathPrefix("composer_legend")
|
||||||
|
result, message = checker.testLayout()
|
||||||
|
self.report += checker.report()
|
||||||
|
self.assertTrue(result, message)
|
||||||
|
|
||||||
def testResizeDisabled(self):
|
def testResizeDisabled(self):
|
||||||
"""Test that test legend does not resize if auto size is disabled"""
|
"""Test that test legend does not resize if auto size is disabled"""
|
||||||
point_path = os.path.join(TEST_DATA_DIR, 'points.shp')
|
point_path = os.path.join(TEST_DATA_DIR, 'points.shp')
|
||||||
|
Binary file not shown.
After Width: | Height: | Size: 5.6 KiB |
Binary file not shown.
After Width: | Height: | Size: 6.5 KiB |
Loading…
x
Reference in New Issue
Block a user