Skip to content

Commit

Permalink
[composer] Remove a bunch of duplicate render calls to map items duri…
Browse files Browse the repository at this point in the history
…ng atlas previews
  • Loading branch information
nyalldawson committed Oct 6, 2014
1 parent 8a0e1ef commit 6d850ad
Show file tree
Hide file tree
Showing 6 changed files with 54 additions and 37 deletions.
7 changes: 5 additions & 2 deletions src/app/composer/qgscomposer.cpp
Expand Up @@ -970,6 +970,11 @@ void QgsComposer::on_mActionAtlasPreview_triggered( bool checked )
mActionAtlasNext->setEnabled( checked );
mActionAtlasPrev->setEnabled( checked );

if ( checked )
{
loadAtlasPredefinedScalesFromProject();
}

bool previewEnabled = mComposition->setAtlasMode( checked ? QgsComposition::PreviewAtlas : QgsComposition::AtlasOff );
if ( !previewEnabled )
{
Expand All @@ -991,8 +996,6 @@ void QgsComposer::on_mActionAtlasPreview_triggered( bool checked )

if ( checked )
{
loadAtlasPredefinedScalesFromProject();
atlasMap->firstFeature();
emit( atlasPreviewFeatureChanged() );
}
else
Expand Down
20 changes: 13 additions & 7 deletions src/app/composer/qgscomposermapwidget.cpp
Expand Up @@ -351,13 +351,19 @@ void QgsComposerMapWidget::updateMapForAtlas()
return;
}

//update atlas based extent for map
QgsAtlasComposition* atlas = &composition->atlasComposition();
atlas->prepareMap( mComposerMap );

//redraw map
mComposerMap->cache();
mComposerMap->update();
if ( mComposerMap->atlasDriven() )
{
//update atlas based extent for map
QgsAtlasComposition* atlas = &composition->atlasComposition();
//prepareMap causes a redraw
atlas->prepareMap( mComposerMap );
}
else
{
//redraw map
mComposerMap->cache();
mComposerMap->update();
}
}

void QgsComposerMapWidget::on_mAtlasMarginRadio_toggled( bool checked )
Expand Down
13 changes: 11 additions & 2 deletions src/core/composer/qgscomposeritem.cpp
Expand Up @@ -1032,6 +1032,11 @@ void QgsComposerItem::refreshRotation( const bool updateItem , const bool adjust
}
}

if ( rotation == mEvaluatedItemRotation )
{
return;
}

if ( adjustPosition )
{
//adjustPosition set, so shift the position of the item so that rotation occurs around item center
Expand Down Expand Up @@ -1297,8 +1302,12 @@ void QgsComposerItem::refreshDataDefinedProperty( const QgsComposerObject::DataD
property == QgsComposerObject::ItemWidth || property == QgsComposerObject::ItemHeight ||
property == QgsComposerObject::AllProperties )
{
QRectF evaluatedRect = evalItemRect( QRectF( pos().x(), pos().y(), rect().width(), rect().height() ) );
setSceneRect( evaluatedRect );
QRectF beforeRect = QRectF( pos().x(), pos().y(), rect().width(), rect().height() );
QRectF evaluatedRect = evalItemRect( beforeRect );
if ( evaluatedRect != beforeRect )
{
setSceneRect( evaluatedRect );
}
}
if ( property == QgsComposerObject::ItemRotation || property == QgsComposerObject::AllProperties )
{
Expand Down
19 changes: 7 additions & 12 deletions src/core/composer/qgscomposermap.cpp
Expand Up @@ -817,15 +817,6 @@ void QgsComposerMap::setNewAtlasFeatureExtent( const QgsRectangle& extent )
emit extentChanged();
}

void QgsComposerMap::toggleAtlasPreview()
{
//atlas preview has been toggled, so update item and extents
mCacheUpdated = false;
updateItem();
emit itemChanged();
emit extentChanged();
}

QgsRectangle* QgsComposerMap::currentMapExtent()
{
//non-const version
Expand Down Expand Up @@ -1093,7 +1084,7 @@ void QgsComposerMap::updateItem()
return;
}

if ( mPreviewMode != QgsComposerMap::Rectangle && !mCacheUpdated )
if ( mPreviewMode != QgsComposerMap::Rectangle && !mCacheUpdated )
{
cache();
}
Expand Down Expand Up @@ -2033,13 +2024,17 @@ void QgsComposerMap::refreshDataDefinedProperty( const QgsComposerObject::DataDe
property == QgsComposerObject::MapAtlasMargin ||
property == QgsComposerObject::AllProperties )
{
QgsRectangle beforeExtent = *currentMapExtent();
refreshMapExtents();
emit itemChanged();
emit extentChanged();
if ( *currentMapExtent() != beforeExtent )
{
emit extentChanged();
}
}

//force redraw
cache();
mCacheUpdated = false;

QgsComposerItem::refreshDataDefinedProperty( property );
}
Expand Down
6 changes: 4 additions & 2 deletions src/core/composer/qgscomposermap.h
Expand Up @@ -217,8 +217,10 @@ class CORE_EXPORT QgsComposerMap : public QgsComposerItem
*/
void setNewAtlasFeatureExtent( const QgsRectangle& extent );

/**Called when atlas preview is toggled, to force map item to update its extent and redraw*/
void toggleAtlasPreview();
/**Called when atlas preview is toggled, to force map item to update its extent and redraw
* @deprecated no longer required
*/
Q_DECL_DEPRECATED void toggleAtlasPreview() {}

/**Returns a pointer to the current map extent, which is either the original user specified
* extent or the temporary atlas-driven feature extent depending on the current atlas state
Expand Down
26 changes: 14 additions & 12 deletions src/core/composer/qgscomposition.cpp
Expand Up @@ -225,6 +225,15 @@ void QgsComposition::updateBounds()
void QgsComposition::refreshItems()
{
emit refreshItemsTriggered();
//force a redraw on all maps
QList<QgsComposerMap*> maps;
composerItems( maps );
QList<QgsComposerMap*>::iterator mapIt = maps.begin();
for ( ; mapIt != maps.end(); ++mapIt )
{
( *mapIt )->cache();
( *mapIt )->update();
}
}

void QgsComposition::setSelectedItem( QgsComposerItem *item )
Expand Down Expand Up @@ -295,6 +304,11 @@ QRectF QgsComposition::compositionBounds() const

void QgsComposition::setPaperSize( const double width, const double height )
{
if ( width == mPageWidth && height == mPageHeight )
{
return;
}

//update item positions
QList<QGraphicsItem *> itemList = items();
QList<QGraphicsItem *>::iterator itemIt = itemList.begin();
Expand Down Expand Up @@ -2825,18 +2839,6 @@ bool QgsComposition::setAtlasMode( const AtlasMode mode )
}
}

QList<QgsComposerMap*> maps;
composerItems( maps );
for ( QList<QgsComposerMap*>::iterator mit = maps.begin(); mit != maps.end(); ++mit )
{
QgsComposerMap* currentMap = ( *mit );
if ( !currentMap->atlasDriven() )
{
continue;
}
currentMap->toggleAtlasPreview();
}

update();
return true;
}
Expand Down

0 comments on commit 6d850ad

Please sign in to comment.