Skip to content

Commit 2613cf6

Browse files
committed
keep extent of overview set to union of extents of layer in overview; dont shrink on resize; fixes #1788
1 parent fad5cf3 commit 2613cf6

File tree

4 files changed

+50
-43
lines changed

4 files changed

+50
-43
lines changed

python/gui/qgsmapoverviewcanvas.sip

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ class QgsMapOverviewCanvas : QWidget
2626

2727
void enableAntiAliasing( bool flag );
2828

29-
void updateFullExtent( const QgsRectangle& rect );
29+
void updateFullExtent();
3030

3131
public slots:
3232

src/gui/qgsmapcanvas.cpp

Lines changed: 31 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -265,45 +265,48 @@ void QgsMapCanvas::setLayerSet( QList<QgsMapCanvasLayer> &layers )
265265
bool layerSetChanged = layerSetOld != layerSet;
266266

267267
// update only if needed
268-
if ( !layerSetChanged )
269-
return;
270-
271-
QgsDebugMsg( "Layer changed to: " + layerSet.join( ", " ) );
272-
273-
for ( i = 0; i < layerCount(); i++ )
268+
if ( layerSetChanged )
274269
{
275-
// Add check if vector layer when disconnecting from selectionChanged slot
276-
// Ticket #811 - racicot
277-
QgsMapLayer *currentLayer = layer( i );
278-
disconnect( currentLayer, SIGNAL( repaintRequested() ), this, SLOT( refresh() ) );
279-
disconnect( currentLayer, SIGNAL( screenUpdateRequested() ), this, SLOT( updateMap() ) );
280-
QgsVectorLayer *isVectLyr = qobject_cast<QgsVectorLayer *>( currentLayer );
281-
if ( isVectLyr )
270+
QgsDebugMsg( "Layers changed to: " + layerSet.join( ", " ) );
271+
272+
for ( i = 0; i < layerCount(); i++ )
282273
{
283-
disconnect( currentLayer, SIGNAL( selectionChanged() ), this, SLOT( selectionChangedSlot() ) );
274+
// Add check if vector layer when disconnecting from selectionChanged slot
275+
// Ticket #811 - racicot
276+
QgsMapLayer *currentLayer = layer( i );
277+
disconnect( currentLayer, SIGNAL( repaintRequested() ), this, SLOT( refresh() ) );
278+
disconnect( currentLayer, SIGNAL( screenUpdateRequested() ), this, SLOT( updateMap() ) );
279+
QgsVectorLayer *isVectLyr = qobject_cast<QgsVectorLayer *>( currentLayer );
280+
if ( isVectLyr )
281+
{
282+
disconnect( currentLayer, SIGNAL( selectionChanged() ), this, SLOT( selectionChangedSlot() ) );
283+
}
284284
}
285-
}
286285

287-
mMapRenderer->setLayerSet( layerSet );
286+
mMapRenderer->setLayerSet( layerSet );
288287

289-
for ( i = 0; i < layerCount(); i++ )
290-
{
291-
// Add check if vector layer when connecting to selectionChanged slot
292-
// Ticket #811 - racicot
293-
QgsMapLayer *currentLayer = layer( i );
294-
connect( currentLayer, SIGNAL( repaintRequested() ), this, SLOT( refresh() ) );
295-
connect( currentLayer, SIGNAL( screenUpdateRequested() ), this, SLOT( updateMap() ) );
296-
QgsVectorLayer *isVectLyr = qobject_cast<QgsVectorLayer *>( currentLayer );
297-
if ( isVectLyr )
288+
for ( i = 0; i < layerCount(); i++ )
298289
{
299-
connect( currentLayer, SIGNAL( selectionChanged() ), this, SLOT( selectionChangedSlot() ) );
290+
// Add check if vector layer when connecting to selectionChanged slot
291+
// Ticket #811 - racicot
292+
QgsMapLayer *currentLayer = layer( i );
293+
connect( currentLayer, SIGNAL( repaintRequested() ), this, SLOT( refresh() ) );
294+
connect( currentLayer, SIGNAL( screenUpdateRequested() ), this, SLOT( updateMap() ) );
295+
QgsVectorLayer *isVectLyr = qobject_cast<QgsVectorLayer *>( currentLayer );
296+
if ( isVectLyr )
297+
{
298+
connect( currentLayer, SIGNAL( selectionChanged() ), this, SLOT( selectionChangedSlot() ) );
299+
}
300300
}
301+
302+
QgsDebugMsg( "Layers have changed, refreshing" );
303+
emit layersChanged();
304+
305+
refresh();
301306
}
302307

303308
if ( mMapOverview )
304309
{
305-
mMapOverview->updateFullExtent( fullExtent() );
306-
307310
QStringList& layerSetOvOld = mMapOverview->layerSet();
308311
if ( layerSetOvOld != layerSetOverview )
309312
{
@@ -314,12 +317,6 @@ void QgsMapCanvas::setLayerSet( QList<QgsMapCanvasLayer> &layers )
314317
// because full extent might have changed
315318
updateOverview();
316319
}
317-
318-
QgsDebugMsg( "Layers have changed, refreshing" );
319-
emit layersChanged();
320-
321-
refresh();
322-
323320
} // setLayerSet
324321

325322
void QgsMapCanvas::enableOverviewMode( QgsMapOverviewCanvas* overview )
@@ -514,11 +511,6 @@ void QgsMapCanvas::updateFullExtent()
514511
QgsDebugMsg( "updating full extent" );
515512

516513
mMapRenderer->updateFullExtent();
517-
if ( mMapOverview )
518-
{
519-
mMapOverview->updateFullExtent( fullExtent() );
520-
updateOverview();
521-
}
522514
refresh();
523515
}
524516

src/gui/qgsmapoverviewcanvas.cpp

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,7 @@ void QgsMapOverviewCanvas::paintEvent( QPaintEvent* pe )
9595
{
9696
mPixmap = QPixmap( mNewSize );
9797
mMapRenderer->setOutputSize( mNewSize, mPixmap.logicalDpiX() );
98+
updateFullExtent();
9899
mNewSize = QSize();
99100
refresh();
100101
}
@@ -106,10 +107,12 @@ void QgsMapOverviewCanvas::paintEvent( QPaintEvent* pe )
106107

107108
void QgsMapOverviewCanvas::drawExtentRect()
108109
{
110+
if ( !mMapCanvas || !mMapRenderer ) return;
111+
109112
const QgsRectangle& extent = mMapCanvas->extent();
110113

111114
// show only when valid extent is set
112-
if ( extent.isEmpty() )
115+
if ( extent.isEmpty() || mMapRenderer->extent().isEmpty() )
113116
{
114117
mPanningWidget->hide();
115118
return;
@@ -290,11 +293,23 @@ void QgsMapOverviewCanvas::setBackgroundColor( const QColor& color )
290293

291294
void QgsMapOverviewCanvas::setLayerSet( const QStringList& layerSet )
292295
{
296+
QgsDebugMsg( "layerSet: " + layerSet.join( ", " ) );
297+
if ( !mMapRenderer ) return;
293298
mMapRenderer->setLayerSet( layerSet );
299+
mMapRenderer->updateFullExtent();
300+
updateFullExtent();
294301
}
295302

296-
void QgsMapOverviewCanvas::updateFullExtent( const QgsRectangle& rect )
303+
void QgsMapOverviewCanvas::updateFullExtent()
297304
{
305+
if ( !mMapRenderer ) return;
306+
QgsRectangle rect;
307+
if ( !mMapRenderer->layerSet().isEmpty() )
308+
{
309+
rect = mMapRenderer->fullExtent();
310+
// expand a bit to keep features on margin
311+
rect.scale( 1.1 );
312+
}
298313
mMapRenderer->setExtent( rect );
299314
drawExtentRect();
300315
}

src/gui/qgsmapoverviewcanvas.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ class GUI_EXPORT QgsMapOverviewCanvas : public QWidget
5959

6060
void enableAntiAliasing( bool flag ) { mAntiAliasing = flag; }
6161

62-
void updateFullExtent( const QgsRectangle& rect );
62+
void updateFullExtent();
6363

6464
public slots:
6565

0 commit comments

Comments
 (0)