Skip to content

Commit a928d57

Browse files
committedJul 25, 2012
Test multiple frame html rendering
1 parent 0ed3d47 commit a928d57

File tree

3 files changed

+67
-8
lines changed

3 files changed

+67
-8
lines changed
 

‎src/core/composer/qgscomposerhtml.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -59,9 +59,8 @@ void QgsComposerHtml::setUrl( const QUrl& url )
5959
QSize contentsSize = mWebPage->mainFrame()->contentsSize();
6060
mWebPage->setViewportSize( contentsSize );
6161

62-
double pixelPerMM = mComposition->printResolution() / 25.4;
63-
mSize.setWidth( contentsSize.width() / pixelPerMM );
64-
mSize.setHeight( contentsSize.height() / pixelPerMM );
62+
mSize.setWidth( contentsSize.width() / mHtmlUnitsToMM );
63+
mSize.setHeight( contentsSize.height() / mHtmlUnitsToMM );
6564
}
6665

6766
void QgsComposerHtml::frameLoaded( bool ok )
@@ -83,7 +82,8 @@ void QgsComposerHtml::render( QPainter* p, const QRectF& renderExtent )
8382

8483
p->save();
8584
p->scale( 1.0 / mHtmlUnitsToMM, 1.0 / mHtmlUnitsToMM );
86-
mWebPage->mainFrame()->render( p, QRegion( renderExtent.left(), renderExtent.top(), renderExtent.width() * mHtmlUnitsToMM, renderExtent.height() * mHtmlUnitsToMM ) );
85+
p->translate( 0.0, -renderExtent.top() * mHtmlUnitsToMM );
86+
mWebPage->mainFrame()->render( p, QRegion( renderExtent.left(), renderExtent.top() * mHtmlUnitsToMM, renderExtent.width() * mHtmlUnitsToMM, renderExtent.height() * mHtmlUnitsToMM ) );
8787
p->restore();
8888
}
8989

‎src/core/composer/qgscomposermultiframe.cpp

Lines changed: 57 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,11 +16,13 @@
1616
#include "qgscomposermultiframe.h"
1717
#include "qgscomposerframe.h"
1818

19-
QgsComposerMultiFrame::QgsComposerMultiFrame( QgsComposition* c ): mComposition( c )
19+
QgsComposerMultiFrame::QgsComposerMultiFrame( QgsComposition* c ): mComposition( c ), mResizeMode( UseExistingFrames )
2020
{
21+
//debug
22+
mResizeMode = ExtendToNextPage;
2123
}
2224

23-
QgsComposerMultiFrame::QgsComposerMultiFrame(): mComposition( 0 )
25+
QgsComposerMultiFrame::QgsComposerMultiFrame(): mComposition( 0 ), mResizeMode( UseExistingFrames )
2426
{
2527
}
2628

@@ -30,12 +32,65 @@ QgsComposerMultiFrame::~QgsComposerMultiFrame()
3032

3133
void QgsComposerMultiFrame::recalculateFrameSizes()
3234
{
35+
if ( mFrameItems.size() < 1 )
36+
{
37+
return;
38+
}
39+
40+
QSizeF size = totalSize();
41+
double totalHeight = size.height();
42+
double currentY = 0;
43+
double currentHeight = 0;
44+
QgsComposerFrame* currentItem = 0;
45+
46+
QList<QgsComposerFrame*>::iterator frameIt = mFrameItems.begin();
47+
for ( ; frameIt != mFrameItems.end(); ++frameIt )
48+
{
49+
if ( currentY >= totalHeight )
50+
{
51+
return;
52+
}
53+
currentItem = *frameIt;
54+
currentHeight = currentItem->rect().height();
55+
currentItem->setContentSection( QRectF( 0, currentY, currentItem->rect().width(), currentHeight ) );
56+
currentItem->update();
57+
currentY += currentHeight;
58+
}
59+
60+
//at end of frames but there is still content left. Add other pages if ResizeMode ==
61+
if ( mResizeMode == ExtendToNextPage )
62+
{
63+
while ( currentY < totalHeight )
64+
{
65+
//find out on which page the lower left point of the last frame is
66+
int page = currentItem->transform().dy() / ( mComposition->paperHeight() + mComposition->spaceBetweenPages() );
67+
//double offset = currentItem->transform().dy() - page * ( mComposition->paperHeight() + mComposition->spaceBetweenPages() );
68+
69+
//e.v. add a new page
70+
if ( mComposition->numPages() < ( page + 2 ) )
71+
{
72+
mComposition->setNumPages( page + 2 );
73+
}
74+
75+
//copy last frame
76+
QgsComposerFrame* newFrame = new QgsComposerFrame( mComposition, this, 0, currentItem->transform().dy() + mComposition->paperHeight() + mComposition->spaceBetweenPages(),
77+
currentItem->rect().width(), currentItem->rect().height() );
78+
newFrame->setContentSection( QRectF( 0, currentY, newFrame->rect().width(), newFrame->rect().height() ) );
79+
currentY += newFrame->rect().height();
80+
currentItem = newFrame;
81+
addFrame( newFrame );
82+
mComposition->addItem( newFrame );
83+
}
84+
}
85+
86+
#if 0
3387
if ( mFrameItems.size() > 0 )
3488
{
3589
QSizeF size = totalSize();
3690
QgsComposerFrame* item = mFrameItems[0];
3791
item->setContentSection( QRectF( 0, 0, item->rect().width(), item->rect().height() ) );
3892
}
93+
#endif //0
3994
}
4095

4196
void QgsComposerMultiFrame::addFrame( QgsComposerFrame* frame )

‎src/core/composer/qgscomposermultiframe.h

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,8 @@ class QgsComposerMultiFrame: public QObject
3232

3333
enum ResizeMode
3434
{
35-
ExtendToNextPage = 0, //duplicates last frame to next page to fit the total size
36-
UseExistingFrames //
35+
UseExistingFrames = 0,
36+
ExtendToNextPage //duplicates last frame to next page to fit the total size
3737
};
3838

3939
QgsComposerMultiFrame( QgsComposition* c );
@@ -43,9 +43,13 @@ class QgsComposerMultiFrame: public QObject
4343

4444
void addFrame( QgsComposerFrame* frame );
4545

46+
void setResizeMode( ResizeMode mode ) { mResizeMode = mode; }
47+
ResizeMode resizeMode() const { return mResizeMode; }
48+
4649
protected:
4750
QgsComposition* mComposition;
4851
QList<QgsComposerFrame*> mFrameItems;
52+
ResizeMode mResizeMode;
4953

5054
protected slots:
5155
void recalculateFrameSizes();

0 commit comments

Comments
 (0)
Please sign in to comment.