diff --git a/src/gui/qgsrubberband.cpp b/src/gui/qgsrubberband.cpp index 622c6ae3cad..d9ede04c2d4 100644 --- a/src/gui/qgsrubberband.cpp +++ b/src/gui/qgsrubberband.cpp @@ -182,6 +182,7 @@ void QgsRubberBand::addPoint( const QgsPoint & p, bool doUpdate /* = true */, in if ( doUpdate ) { + setVisible( true ); updateRect(); update(); } @@ -418,6 +419,7 @@ void QgsRubberBand::addGeometry( QgsGeometry* geom, QgsVectorLayer* layer ) return; } + setVisible( true ); updateRect(); update(); } @@ -567,7 +569,6 @@ void QgsRubberBand::updateRect() QgsRectangle rect( topLeft.x(), topLeft.y(), topLeft.x() + r.width()*res, topLeft.y() - r.height()*res ); setRect( rect ); - setVisible( true ); } void QgsRubberBand::updatePosition( ) diff --git a/tests/src/gui/testqgsrubberband.cpp b/tests/src/gui/testqgsrubberband.cpp index 1c69ec3a17c..589aa3f87e0 100644 --- a/tests/src/gui/testqgsrubberband.cpp +++ b/tests/src/gui/testqgsrubberband.cpp @@ -46,6 +46,7 @@ class TestQgsRubberband : public QObject void testAddSingleMultiGeometries(); //test for #7728 void testBoundingRect(); //test for #12392 + void testVisibility(); //test for 12486 private: QgsMapCanvas* mCanvas; @@ -153,6 +154,46 @@ void TestQgsRubberband::testBoundingRect() } +void TestQgsRubberband::testVisibility() +{ + mRubberband = new QgsRubberBand( mCanvas, mPolygonLayer->geometryType() ); + + // Visibility is set to false by default + QCOMPARE( mRubberband->isVisible(), false ); + + // Check visibility after setting to empty geometry + QSharedPointer emptyGeom( new QgsGeometry ); + mRubberband->setToGeometry( emptyGeom.data(), mPolygonLayer ); + QCOMPARE( mRubberband->isVisible(), false ); + + // Check that visibility changes + mRubberband->setVisible( true ); + mRubberband->setToGeometry( emptyGeom.data(), mPolygonLayer ); + QCOMPARE( mRubberband->isVisible(), false ); + + // Check visibility after setting to valid geometry + QSharedPointer geom( QgsGeometry::fromWkt( + "POLYGON((10 10,10 30,30 30,30 10,10 10))" + ) ); + mRubberband->setToGeometry( geom.data(), mPolygonLayer ); + QCOMPARE( mRubberband->isVisible(), true ); + + // Add point without update + mRubberband->reset( true ); + mRubberband->addPoint( QgsPoint( 10, 10 ), false ); + QCOMPARE( mRubberband->isVisible(), false ); + + // Add point with update + mRubberband->addPoint( QgsPoint( 20, 20 ), true ); + QCOMPARE( mRubberband->isVisible(), true ); + + // Check visibility after zoom (should not be changed) + mRubberband->setVisible( false ); + mCanvas->zoomIn(); + QCOMPARE( mRubberband->isVisible(), false ); + +} + QTEST_MAIN( TestQgsRubberband ) #include "testqgsrubberband.moc"