Skip to content

Commit 3f595ee

Browse files
committed
[composer] Always update map caches when zoom changes
Before this would only happen with the "render" mode, not "cache" mode. Now updating caches is so responsive and transparent to users we can safely trigger the background cache update whenever the zoom changes without any performance impact.
1 parent 491abc2 commit 3f595ee

File tree

3 files changed

+11
-15
lines changed

3 files changed

+11
-15
lines changed

src/app/composer/qgscomposer.cpp

+10-4
Original file line numberDiff line numberDiff line change
@@ -763,6 +763,8 @@ void QgsComposer::connectViewSlots()
763763
//listen out for position updates from the QgsComposerView
764764
connect( mView, &QgsComposerView::cursorPosChanged, this, &QgsComposer::updateStatusCursorPos );
765765
connect( mView, &QgsComposerView::zoomLevelChanged, this, &QgsComposer::updateStatusZoom );
766+
767+
connect( mView, &QgsComposerView::zoomLevelChanged, this, &QgsComposer::invalidateCachedRenders );
766768
}
767769

768770
void QgsComposer::connectCompositionSlots()
@@ -774,7 +776,6 @@ void QgsComposer::connectCompositionSlots()
774776

775777
connect( mComposition, &QgsComposition::nameChanged, this, &QgsComposer::setWindowTitle );
776778
connect( mComposition, &QgsComposition::selectedItemChanged, this, &QgsComposer::showItemOptions );
777-
connect( mComposition, &QgsComposition::itemAdded, this, &QgsComposer::compositionItemAdded );
778779
connect( mComposition, &QgsComposition::itemRemoved, this, &QgsComposer::deleteItem );
779780
connect( mComposition, &QgsComposition::paperSizeChanged, this, [ = ]
780781
{
@@ -802,6 +803,7 @@ void QgsComposer::connectOtherSlots()
802803
connect( mVerticalRuler, &QgsComposerRuler::cursorPosChanged, this, &QgsComposer::updateStatusCursorPos );
803804
//listen out for zoom updates
804805
connect( this, &QgsComposer::zoomLevelChanged, this, &QgsComposer::updateStatusZoom );
806+
connect( this, &QgsComposer::zoomLevelChanged, this, &QgsComposer::invalidateCachedRenders );
805807
}
806808

807809
void QgsComposer::open()
@@ -1007,11 +1009,15 @@ void QgsComposer::atlasFeatureChanged( QgsFeature *feature )
10071009
mapCanvas()->expressionContextScope().addVariable( QgsExpressionContextScope::StaticVariable( QStringLiteral( "atlas_geometry" ), QVariant::fromValue( atlasFeature.geometry() ), true ) );
10081010
}
10091011

1010-
void QgsComposer::compositionItemAdded( QgsComposerItem *item )
1012+
void QgsComposer::invalidateCachedRenders()
10111013
{
1012-
if ( item && item->type() == QgsComposerItem::ComposerMap )
1014+
//redraw cached map items
1015+
QList< QgsComposerMap *> maps;
1016+
mComposition->composerItems( maps );
1017+
1018+
Q_FOREACH ( QgsComposerMap *map, maps )
10131019
{
1014-
connect( this, &QgsComposer::zoomLevelChanged, static_cast< QgsComposerMap *>( item ), &QgsComposerMap::renderModeUpdateCachedImage );
1020+
map->invalidateCache();
10151021
}
10161022
}
10171023

src/app/composer/qgscomposer.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -614,7 +614,7 @@ class QgsComposer: public QMainWindow, private Ui::QgsComposerBase
614614

615615
void atlasFeatureChanged( QgsFeature *feature );
616616

617-
void compositionItemAdded( QgsComposerItem *item );
617+
void invalidateCachedRenders();
618618

619619

620620

src/gui/qgscomposerview.cpp

-10
Original file line numberDiff line numberDiff line change
@@ -2054,16 +2054,6 @@ void QgsComposerView::wheelZoom( QWheelEvent *event )
20542054
emit zoomLevelChanged();
20552055
updateRulers();
20562056
update();
2057-
//redraw cached map items
2058-
QList<QGraphicsItem *> itemList = composition()->items();
2059-
QList<QGraphicsItem *>::iterator itemIt = itemList.begin();
2060-
for ( ; itemIt != itemList.end(); ++itemIt )
2061-
{
2062-
if ( QgsComposerMap *mypItem = dynamic_cast<QgsComposerMap *>( *itemIt ) )
2063-
{
2064-
mypItem->renderModeUpdateCachedImage();
2065-
}
2066-
}
20672057
}
20682058

20692059
void QgsComposerView::setZoomLevel( double zoomLevel )

0 commit comments

Comments
 (0)