From cb3a08e6efe193c8bd9fe9d3675678f9e5466975 Mon Sep 17 00:00:00 2001 From: Marco Hugentobler Date: Sun, 19 Aug 2012 11:04:30 +0200 Subject: [PATCH] More resize mode fixes --- src/core/composer/qgscomposermultiframe.cpp | 39 ++++++++++++++++----- 1 file changed, 30 insertions(+), 9 deletions(-) diff --git a/src/core/composer/qgscomposermultiframe.cpp b/src/core/composer/qgscomposermultiframe.cpp index af59edb7b20..5080d1da47d 100644 --- a/src/core/composer/qgscomposermultiframe.cpp +++ b/src/core/composer/qgscomposermultiframe.cpp @@ -89,21 +89,29 @@ void QgsComposerMultiFrame::recalculateFrameSizes() } //at end of frames but there is still content left. Add other pages if ResizeMode == - if ( mResizeMode == RepeatUntilFinished || mResizeMode == ExtendToNextPage ) + if ( mResizeMode != UseExistingFrames ) { - while ( currentY < totalHeight ) + while (( mResizeMode == RepeatOnEveryPage ) || currentY < totalHeight ) { //find out on which page the lower left point of the last frame is int page = currentItem->transform().dy() / ( mComposition->paperHeight() + mComposition->spaceBetweenPages() ); - - //add new pages if necessary - if ( mComposition->numPages() < ( page + 2 ) ) + if ( mResizeMode == RepeatOnEveryPage ) { - mComposition->setNumPages( page + 2 ); + if ( page > mComposition->numPages() - 2 ) + { + break; + } + } + else + { + if ( mComposition->numPages() < ( page + 2 ) ) + { + mComposition->setNumPages( page + 2 ); + } } double frameHeight = 0; - if ( mResizeMode == RepeatUntilFinished ) + if ( mResizeMode == RepeatUntilFinished || mResizeMode == RepeatOnEveryPage ) { frameHeight = currentItem->rect().height(); } @@ -111,10 +119,23 @@ void QgsComposerMultiFrame::recalculateFrameSizes() { frameHeight = ( currentY + mComposition->paperHeight() ) > totalHeight ? totalHeight - currentY : mComposition->paperHeight(); } + + double newFrameY = ( page + 1 ) * ( mComposition->paperHeight() + mComposition->spaceBetweenPages() ); + if ( mResizeMode == RepeatUntilFinished || mResizeMode == RepeatOnEveryPage ) + { + newFrameY += currentItem->transform().dy() - page * ( mComposition->paperHeight() + mComposition->spaceBetweenPages() ); + } QgsComposerFrame* newFrame = new QgsComposerFrame( mComposition, this, currentItem->transform().dx(), - ( mComposition->numPages() - 1 ) * ( mComposition->paperHeight() + mComposition->spaceBetweenPages() ), + newFrameY, currentItem->rect().width(), frameHeight ); - newFrame->setContentSection( QRectF( 0, currentY, newFrame->rect().width(), newFrame->rect().height() ) ); + if ( mResizeMode == RepeatOnEveryPage ) + { + newFrame->setContentSection( QRectF( 0, 0, newFrame->rect().width(), newFrame->rect().height() ) ); + } + else + { + newFrame->setContentSection( QRectF( 0, currentY, newFrame->rect().width(), newFrame->rect().height() ) ); + } currentY += frameHeight; currentItem = newFrame; addFrame( newFrame, false );