Skip to content

Commit 200669a

Browse files
committed
Fix guide positioning when multiple pages are present
1 parent a1128a5 commit 200669a

File tree

3 files changed

+34
-3
lines changed

3 files changed

+34
-3
lines changed

src/core/layout/qgslayoutguidecollection.cpp

+2-2
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@ void QgsLayoutGuide::update()
8989
}
9090
else
9191
{
92-
mLineItem->setLine( 0, layoutPos, mPage->rect().width(), layoutPos );
92+
mLineItem->setLine( 0, layoutPos + mPage->y(), mPage->rect().width(), layoutPos + mPage->y() );
9393
mLineItem->setVisible( showGuide );
9494
}
9595

@@ -102,7 +102,7 @@ void QgsLayoutGuide::update()
102102
}
103103
else
104104
{
105-
mLineItem->setLine( layoutPos, 0, layoutPos, mPage->rect().height() );
105+
mLineItem->setLine( layoutPos, mPage->y(), layoutPos, mPage->y() + mPage->rect().height() );
106106
mLineItem->setVisible( showGuide );
107107
}
108108

src/core/layout/qgslayoutpagecollection.cpp

+3-1
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,7 @@ void QgsLayoutPageCollection::reflow()
9595
currentY += mLayout->convertToLayoutUnits( page->pageSize() ).height() + spaceBetweenPages();
9696
p.setY( currentY );
9797
}
98+
mLayout->guides().update();
9899
mLayout->updateBounds();
99100
emit changed();
100101
}
@@ -193,7 +194,8 @@ int QgsLayoutPageCollection::predictPageNumberForPoint( QPointF point ) const
193194

194195
QgsLayoutItemPage *QgsLayoutPageCollection::pageAtPoint( QPointF point ) const
195196
{
196-
Q_FOREACH ( QGraphicsItem *item, mLayout->items( point ) )
197+
const QList< QGraphicsItem * > items = mLayout->items( point );
198+
for ( QGraphicsItem *item : items )
197199
{
198200
if ( item->type() == QgsLayoutItemRegistry::LayoutPage )
199201
{

tests/src/python/test_qgslayoutguides.py

+29
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,11 @@ def testUpdateGuide(self):
6565
p = QgsProject()
6666
l = QgsLayout(p)
6767
l.initializeDefaults() # add a page
68+
# add a second page
69+
page2 = QgsLayoutItemPage(l)
70+
page2.setPageSize('A5')
71+
l.pageCollection().addPage(page2)
72+
6873
g = QgsLayoutGuide(Qt.Horizontal, QgsLayoutMeasurement(5, QgsUnitTypes.LayoutCentimeters), l.pageCollection().page(0))
6974
g.setLayout(l)
7075
g.update()
@@ -85,6 +90,19 @@ def testUpdateGuide(self):
8590
self.assertEqual(g.item().line().y2(), 15)
8691
self.assertEqual(g.layoutPosition(), 15)
8792

93+
# guide on page2
94+
g1 = QgsLayoutGuide(Qt.Horizontal, QgsLayoutMeasurement(5, QgsUnitTypes.LayoutCentimeters), l.pageCollection().page(1))
95+
g1.setLayout(l)
96+
g1.update()
97+
g1.setPosition(QgsLayoutMeasurement(15, QgsUnitTypes.LayoutMillimeters))
98+
g1.update()
99+
self.assertTrue(g1.item().isVisible())
100+
self.assertEqual(g1.item().line().x1(), 0)
101+
self.assertEqual(g1.item().line().y1(), 235)
102+
self.assertEqual(g1.item().line().x2(), 148)
103+
self.assertEqual(g1.item().line().y2(), 235)
104+
self.assertEqual(g1.layoutPosition(), 235)
105+
88106
# vertical guide
89107
g2 = QgsLayoutGuide(Qt.Vertical, QgsLayoutMeasurement(5, QgsUnitTypes.LayoutCentimeters), l.pageCollection().page(0))
90108
g2.setLayout(l)
@@ -109,6 +127,17 @@ def testUpdateGuide(self):
109127
g.update()
110128
self.assertFalse(g.item().isVisible())
111129

130+
# guide on page2
131+
g3 = QgsLayoutGuide(Qt.Vertical, QgsLayoutMeasurement(5, QgsUnitTypes.LayoutCentimeters), l.pageCollection().page(1))
132+
g3.setLayout(l)
133+
g3.update()
134+
self.assertTrue(g3.item().isVisible())
135+
self.assertEqual(g3.item().line().x1(), 50)
136+
self.assertEqual(g3.item().line().y1(), 220)
137+
self.assertEqual(g3.item().line().x2(), 50)
138+
self.assertEqual(g3.item().line().y2(), 430)
139+
self.assertEqual(g3.layoutPosition(), 50)
140+
112141
def testCollection(self):
113142
p = QgsProject()
114143
l = QgsLayout(p)

0 commit comments

Comments
 (0)