Merge pull request #1972 from naihil/rubberband-visibility-fix

Don`t change current visibility flag of rubberband on updates
This commit is contained in:
Sandro Santilli 2015-04-07 10:47:29 +02:00
commit 892f142e28
2 changed files with 43 additions and 1 deletions

View File

@ -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( )

View File

@ -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<QgsGeometry> 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<QgsGeometry> 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"